project (demo) :
编译一个名为demo的工程
add_executable(executable_name source1 [source2 ...]) :
作用: 通过源文件,生成可执行文件
executable_name 是生成的可执行文件的名称,source1、source2 …是用于生成可执行文件的源代码文件,可以有多个这样的源代码文件
aux_source_directory(dir var):
作用:将文件夹dir 下的所有文件赋值给var
dir表示源文件目录,var表示用于存放所有源文件的变量名。
set(VAR var) :
这相当于C语言中的宏定义 若放在C语言中则相当于 #define VAR var
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...]):
作用:添加头文件所处文件夹
AFTER和BEFORE:指定添加的头文件路径是在系统默认路径之前或之后。
SYSTEM:指定添加的头文件路径是为了包含系统头文件,并将这些路径标记为系统路径,以避免在产生警告时提醒用户
dir1、dir2等:指定要添加的头文件路径,可以指定多个路径。
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) :
作用:这个命令的作用是向当前项目中添加一个子目录
source_dir 源代码目录 指定一个包含CMakeLists.txt和h代码文件所在的目录,该目录可以是绝对路径,也可以是相对路径,
binary_dir 二进制代码目录 这个目录是可选的,如果指定,cmake命令执行后的输出文件(可执行文件等)将会存放在此处,若没有指定,默认情况等于source_dir
没有进行相对路径计算前的路径,也就是CMAKE_BINARY_DIR
。
EXCLUDE_FROM_ALL标记 这个标志是可选的,如果传递了该参数表示新增加的子目录将会排除在ALL目录之外(可能是make系统中的make all?),表示这个目录将从IDE的工程中排除。用户必须显式在子文件这个编译目标(手动cmake之类的)。
add_library(<name> [STATIC|SHARED|MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...]):
作用:生成库文件包括动态库与静态库
<name>
表示生成的库名称
source1 [source2 ...]
表示源代码文件。
STATIC
、SHARED
和MODULE
用于指定库的类型,分别表示静态库(.a
文件)、动态库(.so
或.dylib
文件)和模块(类似于动态库,但有区别)。
EXCLUDE_FROM_ALL
表示该库不会随着make all
命令执行而编译。
set_target_properties(target1 target2 ... PROPERTIES prop1 value1 PROPERTIES prop2 value2 ...)
作用:设置指定目标属性的命令
arget1、target2等是需要设置属性的目标名称。
prop1、prop2等是目标的属性名 PROPERTIES 这是个关键字
value1、value2等则是要设置的属性值。
find_library(VAR name1 [path1 path2 ...])
作用:在指定路径中查找库文件
VAR是一个用于存储所找到的链接库路径的变量名,可以根据需要指定。
name1是链接库的名称,
path1、path2等是可选的搜索路径,表示要搜索的目录列表。如果未指定路径列表,则函数将在默认的系统库路径中搜索。
注:使用该指令需在调用cmake前,可选搜索路径就得含有该库,否则会失败,这个是调用外在库时才会使用的,如果已经调用了 add_library指令就不要再调用该指令了。
target_link_libraries(<target> [item1 [item2 [...] ] ] [ [debug|optimized|general] <item>] [...])
<target>是用于编译的可执行文件或库文件的名称,
item1、item2等参数是需要链接到目标文件中的库文件的名称。
后面的选项(debug、optimized、general)可以指定连接选项以及链接库的属性
一些常用的宏:
EXECUTABLE_OUTPUT_PATH 生成的可执行文件存放的路径
LIBRARY_OUTPUT_PATH 生成的库文件存放的路径
PROJECT_SOURCE_DIR(只读) 工程文件的路径
CMAKE_SYSTEM_PROCESSOR 用于存储当前系统的处理器架构信息
CMAKE_C_COMPILER 用于指定C语言编译器的路径和名称
CMAKE_CXX_COMPILER 用于查找C++编译器可执行文件路径的变量。
CMAKE_ASM_COMPILER 用于指定GNU汇编器的路径,这个变量通常在配置C和C++程序的过程中被设置。
示例:
文件结构(忽略wuya 与 HD 俩个文件夹下的内容)
进入cmake 文件夹下 运行 cmake ..
即可得到 一个makefile 文件 运行make 动态链接库存于cmake下的lib文件夹内