CMake 常用指令
CMake Manual 摘要
[CMakeLists.txt]
1 | [Example] |
PROJECT
PROJECT指令可定义工程名称, 并指定工程支持的语言, (支持的语言列表是可以忽略的, 默认情况表示支持所有语言)1
PROJECT(projectname [CXX] [C] [Java])
PROJECT隐式的定义了两个 cmake 变量:<projectname>
_BINARY_DIR 和 <projectname>
_SOURCE_DIR, 因此[Example]中直接使用.
因为采用的是内部编译,两个变量目前指的都是工程所在路径/backup/cmake/t1.
同时 cmake 系统也预定义了 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR,
其值分别与 HELLO_BINARY_DIR 与 HELLO_SOURCE_DIR一致. 为了统一起见,
建议直接使用 PROJECT_BINARY_DIR, PROJECT_SOURCE_DIR, 即使修改了工程名称,也不会影响这两个变量.
如果使用了
SET
1 | SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) |
SET 指令可以用来显式的定义变量, (也可隐式, 尚未研究)
如果有多个源文件,也可以定义成:1
SET(SRC_LIST main.c t1.c t2.c)
MESSAGE
三种信息类型:
SEND_ERROR, 产生错误,生成过程被跳过.
SATUS, 输出前缀为—的信息.
FATAL_ERROR, 立即终止所有 cmake 过程.1
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
INCLUDE_DIRECTORIES
向工程添加多个特定的头文件搜索路径, 路径之间用空格分割,如果路径中包含了空格, 可以使用双引号将它括起来, 默认的行为是追加到当前的头文件搜索路径的后面.1
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
两种方式来进行控制搜索路径添加的方式:
1, CMAKE_INCLUDE_DIRECTORIES_BEFORE, 通过 SET 为 on, 可以将添加的头文件搜索路径放在已有路径的前面
2, 通过 AFTER 或者 BEFORE 参数, 也可控制追加还是置前
LINK_DIRECTORIES
添加非标准的共享库搜索路径,比如,在工程内部同时存在共享库和可执行二进制,在编译时就需要指定一下这些共享库的路径1
LINK_DIRECTORIES(directory1 directory2 ...)
TARGET_LINK_LIBRARIES
为 target 添加需要链接的共享库(静态库.a与动态库.so)1
TARGET_LINK_LIBRARIES(target library1, <debug | optimized> library2 ...)
ADD_EXECUTABLE
定义了这个工程会生成一个文件名为1
ADD_EXECUTABLE(<exec_filename> ${SRC_LIST})
如在 IF 控制语句,变量是直接使用变量名引用,而不需要${}. 如果使用了${}去应用变量,其实 IF 会去判断名为${}所代表的值的变量, 那当然是不存在的了.
特殊环境变量
CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH
务必注意, 这两个是环境变量而不是 cmake 变量。
使用方法是要在 bash 中用 export 或者在 csh 中使用 set 命令设置或者
CMAKE_INCLUDE_PATH=/home/include cmake ..等方式。