参考资料:
http://www.360doc.com/content/16/0420/15/32619808_552310135.shtml
http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf
http://blog.csdn.net/xocoder/article/details/8546907指令推荐大写; 大小写不敏感;
变量使用${}
, IF语句中直接使用变量,不需要${}
下面是一个例子:
PROJECT (HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
说明:
PROJECT(name)
name工程名, 。这个指令隐式的定义了两个 cmake 变量:
<projectname>_BINARY_DIR
以及<projectname>_SOURCE_DIR
,这里就是name_BINARY_DIR
;
cmake 系统也帮助我们预定义了PROJECT_BINARY_DIR
和PROJECT_SOURCE_DIR
变量,他们的值分别跟HELLO_BINARY_DIR
与HELLO_SOURCE_DIR
一致。
SET 指令的语法, 用来设置变量:
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
MESSAGE用于cmake时输出消息; STATUS是输出前加上--
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
输出可执行文件定义:
ADD_EXECUTABLE(hello ${SRC_LIST})
定义了这个工程会生成一个文件名为 hello 的可执行文件,相关的源文件是 SRC_LIST 中定义的源文件列表;
添加原文件路径:
AUX_SOURCE_DIRECTORY(. namevar)
AUT_SOURCE_DIRECTORY(ohterpath namevsr) #otherpath是源文件搜索路径
ADD_EXECUTABLE(hello ${namevsr})
头文件搜索路径:
如果有多个文件夹中包含有源文件, 可以使用下面的命令:
INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
这条指令可以用来向工程添加多个特定的头文件搜索路径,路径之间用空格分割,如果路径中包含了空格,可以使用双引号将它括起来,默认的行为是追加到当前的头文件搜索路径的
后面,你可以通过两种方式来进行控制搜索路径添加的方式:
1. CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过 SET 这个 cmake 变量为 on,可以
将添加的头文件搜索路径放在已有路径的前面;
2. 这里的AFTER|BEFORE 也可以控制;
添加共享库
LINK_DIRECTORIES 和 TARGET_LINK_LIBRARIES
LINK_DIRECTORIES 的全部语法是:
LINK_DIRECTORIES(directory1 directory2 ...)
这个指令非常简单,添加非标准的共享库搜索路径,比如,在工程内部同时存在共享库和可执行二进制,在编译时就需要指定一下这些共享库的路径。这个例子中我们没有用到这个指令。
TARGET_LINK_LIBRARIES 的全部语法是:
TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2 ...)
ADD_SUBDIRECTORY 指令
ADD_SUBDIRECTORY(source_dir [binary_dir [EXCLUDE_FROM_ALL])
这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存
放的位置。E