makefile/cmake 简单介绍使用

Makefile 是一种常用于编译的脚本语言。它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译)。

注意 Makefile 文件命令必须是 Makefile 或者 makefile,并使用 make 命令编译。

目标…: 依赖…
(TAB) 命令1
(TAB) 命令2
意每条命令前必须有且仅有一个 tab 保持缩进,这是语法要求
目标就是可执行的文件,依赖就是多个源文件

重要的两个函数wildcard . patsubst INCS

SRC := ( w i l d c a r d . / ∗ . c ) m a i n : (wildcard ./*.c) main: (wildcard./.c)main:(SRC)
gcc $(SRC) -o main
一般用于很多的源文件,不可能一个个写,所以可以用wildcard来通配

INCS主要指定头文件在的目录,
INCS:= -i./xxx
一般用于多层目录的项目。

pat 是 pattern 的缩写,subst 是 substring 的缩写
OBJ = $(patsubst %.c, %.o, $(SRC))
取出 SRC 中所有的值,然后将 “.c” 替换为 “.o”,最后赋值给 OBJ 变量。
SRC = $(wildcard *.c)
OBJ = $(patsubst %.c, %.o, $(SRC))

ALL: hello.out

hello.out: $(OBJ)
gcc $(OBJ) -o hello.out

$(OBJ): $(SRC)
gcc -c $(SRC) -o $(OBJ)
这样后面更改某个 “.c” 文件时,其它的 “.c” 文件将不再编译,而只是编译有更改的 “.c” 文件,可以大大节约大项目中的编译速度。
代码清理 clean
clean:
-rm -rf $(OBJ) hello.out
make clean一下就可以清理产生的文件

伪目标 .PHONY:clean是为了防止本身有一个clean文件,make只会显示`clean’ is up to date.

如果换了个平台makefile又要重新修改,这时候就出现了下面的Cmake这个工具.它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

CMake 最低版本号要求

cmake_minimum_required (VERSION 2.8)

项目信息

project (Demo2)

指定生成目标

add_executable(Demo main.cc MathFunctions.cc)
(但是如果源文件很多,把所有源文件的名字都加进去将是一件烦人的工作
aux_source_directory(. DIR_SRCS)

指定生成目标

add_executable(Demo ${DIR_SRCS})

多个目录,多个源文件

并将名称保存到 DIR_SRCS 变量

aux_source_directory(. DIR_SRCS)

添加 math 子目录

add_subdirectory(math)

指定生成目标

add_executable(Demo main.cc)

添加链接库

target_link_libraries(Demo MathFunctions)
该文件添加了下面的内容: 第3行,使用命令 add_subdirectory 指明本项目包含一个子目录 math,这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理 。第6行,使用命令 target_link_libraries 指明可执行文件 main 需要连接一个名为 MathFunctions 的链接库 。子目录中的 CMakeLists.txt:

查找当前目录下的所有源文件

并将名称保存到 DIR_LIB_SRCS 变量

aux_source_directory(. DIR_LIB_SRCS)

生成链接库

add_library (MathFunctions ${DIR_LIB_SRCS})
在该文件中使用命令 add_library 将 src 目录中的源文件编译为静态链接库。

猜你喜欢

转载自blog.csdn.net/weixin_53344209/article/details/131310653