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>)