project
## 设置项目的名称,版本和允许的语言 project(<PROJECT-NAME> [LANGUAGES] [<language-name>...]) project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [LANGUAGES <language-name>...])
add_executable
## 添加一个可执行target. ## <name> target的名称,在项目中全局唯一 ## 使用RUNTIME_OUTPUT_DIRECTORY属性,可改变生成target的默认位置
## 使用OUTPUT_NAME属性,可改变生成target的默认名称
## WIN32 设置target的WIN32_EXECUTABLE属性
## MACOSX_BUNDLE 设置target的MACOSX_BUNDLE属性
## EXCLUDE_ROM_ALL add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
## 添加一个导入target,它引用了项目外的一个可执行文件
add_executable(<name> IMPORTED [GLOBAL])
## 添加一个可执行target的别名
add_executable(<name> ALIAS <target>)
add_library
## 添加一个library target ## <name> 指定target的名字,在项目中全局唯一 ## STATIC 静态库 ## SHARED 动态库 ## MODULE "插件库" (Windows resource DLL,托管C++/CLI DLL) ## 怎样添加MACOSX Framework? - 通过设置SHARED/STATIC库target的FRAMEWORK属性。
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...]
## 添加一个导入的library target,它引用了项目之外的某个库。 ## 不会产生build这个目标的代码。 add_library(<name> <SHARED|STATIC|MODULE|OBJECT|UNKNOWN> IMPORTED [GLOBAL])
## 添加一个Object Library,它用于将源文件编译。 add_library(<name> OBJECT <src>...) ## add_library()和add_executable()可以通过$<TARGET_OBJECTS:name>的方式引用Object Library,作为一个源。 ## 例: add_library(... $<TARGET_OBJECTS:objlib> ...) add_executable(... $<TARGET_OBJECTS:objlib> ...)
## Alias Libraries 定义别名
add_library(<name> ALIAS <target>)
## Interface Libraries 我不知道
add_library(<name> INTERFACE [IMPORTED [GLOBAL]])
add_dependencies
## 添加顶级target对其他顶级target的依赖。 add_dependencies(<target> [<target-dependency>]...)
顶级target是指用以下命令创建的:add_executable(),add_library(),add_custom_target()。
add_subdirectory
## Add a subdirectory to the build.
## source_dir 指定子目录,子目录中须包含CMakeLists.txt文件和代码文件。
## binary_dir 指定存放输出文件的目录
add_subdirectory(source_dir [binary_dir]
[EXCLUDE_FROM_ALL])
add_complie_options
## 添加编译选项
add_compile_options(<option> ...)
添加编译选项到编译器的命令行。
作用范围:当前目录下的targets和在此命令之后调用的子目录targets。
添加预处理定义可用它们替代:target_compile_definitions(),add_definitions()
添加包含目录可用它们替代:target_include_directories(),include_directories()
add_definitions
## 编译时添加_D定义项
add_definitions(-DFOO -DBAR ...)
这个命令可用于添加任意标志,但它是为添加预处理定义而设置的。
target_complie_definitions
## 指定编译target时用到的定义。 target_compile_definitions(<target> <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
include_directories
## 添加文件包含目录
## 目录添加到当前CMakeLists文件的INCLUDE_DIRECTORIES属性中,
## 也添加到当前CMakeLists文件所有target的INCLUDE_DIRECTORIES属性中
## AFTER|BEFORE 指定包含目录附加到前部还是尾部
## SYSTEM 指示包含目录是否是系统包含目录
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
target_include_directories
## 添加包含目录到一个target ## BEFORE 目录附加到前部 ## target_include_directories(<target> [SYSTEM] [BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
add_custom_target
## 添加一个执行指定命令的target.
## ALL 指明这个target会被放入缺省构建目标,然后它每次都会被运行
## COMMAND 设定在构建时会运行的命令 add_custom_target(Name [ALL] [command1 [args1...]] [COMMAND command2 [args2...] ...] [DEPENDS depend depend depend ... ] [BYPRODUCTS [files...]] [WORKING_DIRECTORY dir] [COMMENT comment] [VERBATIM] [USES_TERMINAL] [COMMAND_EXPAND_LISTS] [SOURCES src1 [src2...]])
add_custom_command
aux_source_directory
## 查找目录下源文件 ## dir 要查找的目录 ## variable 结果存入变量,各文件名以";"分隔。 aux_source_directory(<dir> <variable>)