您的位置:首页 > 其它

[4] CMake总结 - 1 预定义变量

2016-02-05 15:31 260 查看
本帖子适用于初学者,StepByStep的入门CMake,CMake也是一门编程语言,只不过是针对编译和链接这种程序构建的过程的语言,学习基本语法就可以初步入门,后面需要什么复杂的功能,进阶掌握需要自己去查找官方文档,后续会给出查阅的一些方式

CMake预定义变量

基本变量

PROJECT_SOURCE_DIR cmake命令后紧跟的目录,一般是工程的根目录

PROJECT_BINARY_DIR 执行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build

CMAKE_INCLUDE_PATH 系统环境变量,非cmake变量

CMAKE_LIBRARY_PATH 系统环境变量,非cmake变量

CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径

CMAKE_CURRENT_BINARY_DIR target编译目录

使用ADD_SURDIRECTORY(src bin)可以更改此变量的值

SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对此变量有影响,只是改变了最终目标文件的存储路径

CMAKE_CURRENT_LIST_FILE 输出调用这个变量的CMakeLists.txt的完整路径

CMAKE_CURRENT_LIST_LINE 输出这个变量所在的行

CMAKE_MODULE_PATH 定义自己的cmake模块所在的路径

这个变量用于定义自己的cmake模块所在的路径,如果你的工程比较复杂,有可能自己编写一些cmake模块,比如SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块

EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置

LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置

PROJECT_NAME 返回通过PROJECT指令定义的项目名称

CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用来控制IF ELSE语句的书写方式

环境变量

使用$ENV{NAME}可以调用系统的环境变量,比如:

MESSAGE(STATUS “HOME dir:”$ENV{HOME})

设置环境变量的方式,SET(ENV{name} value)

CMAKE_INCLUDE_CURRENT_DIR

自动添加CMAKE_CURRENT_BINARY_DIR和CMAKE_CURRENT_SOURCE_DIR到当前处理

的CMakeLists.txt。

相当于在每个CMakeLists.txt加入:

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE

将工程提供的头文件目录始终至于系统头文件目录的前面,当你定义的头文件确实跟系统发

生冲突时可以提供一些帮助。

CMAKE_INCLUDE_PATH、CMAKE_LIBRARY_PATH

务必注意,这两个是环境变量而不是cmake变量。

使用方法是要在bash中用export或者在csh中使用set命令设置或者CMAKE_INCLUDE_PATH=/home/include cmake ..等方式。

也就是,如果头文件没有存放在常规路径(/usr/include, /usr/local/include等),

则可以通过这些变量就行弥补。

比如hello.h存放在/usr/include/hello目录,所以直接查找肯定是找不到的。

前面我们直接使用了绝对路径INCLUDE_DIRECTORIES(/usr/include/hello)告诉工

程这个头文件目录。为了将程序更智能一点,

我们可以使用CMAKE_INCLUDE_PATH来进行,使用bash的方法

如下:

export CMAKE_INCLUDE_PATH=/usr/include/hello

然后在头文件中将INCLUDE_DIRECTORIES(/usr/include/hello)替换为:

FIND_PATH(myHeader hello.h)

IF(myHeader)

INCLUDE_DIRECTORIES(${myHeader})

ENDIF(myHeader)

上述的一些指令我们在后面会介绍。

这里简单说明一下,FIND_PATH用来在指定路径中搜索文件名,比如:

FIND_PATH(myHeader NAMES hello.h PATHS /usr/include

/usr/include/hello)

这里我们没有指定路径,但是,cmake仍然可以帮我们找到hello.h存放的路径,就是因

为我们设置了环境变量CMAKE_INCLUDE_PATH。

如果你不使用FIND_PATH,CMAKE_INCLUDE_PATH变量的设置是没有作用的,你不能指

望它会直接为编译器命令添加参数-I。

以此为例,CMAKE_LIBRARY_PATH可以用在FIND_LIBRARY中。

同样,因为这些变量直接为FIND_指令所使用,所以所有使用FIND_指令的cmake模块都

会受益。

系统信息

CMAKE_MAJOR_VERSION cmake主版本号,如3.2.2中的3

CMAKE_MINOR_VERSION cmake次版本号,如3.2.2中的2

CMAKE_PATCH_VERSION cmake补丁等级,如3.2.2中的2

CMAKE_SYSTEM 系统名称,例如Linux-2.6.22

CAMKE_SYSTEM_NAME 不包含版本的系统名,如Linux

CMAKE_SYSTEM_VERSION 系统版本,如2.6.22

CMAKE_SYSTEM_PROCESSOR 处理器名称,如i686

UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwin

WIN32 在所有的win32平台为TRUE,包括cygwin

开关选项

BUILD_SHARED_LIBS 控制默认的库编译方式。如果未进行设置,使用ADD_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库

CMAKE_C_FLAGS 设置C编译选项,也可以通过指令ADD_DEFINITIONS()添加

CMAKE_CXX_FLAGS 设置C++编译选项,也可以通过指令ADD_DEFINITIONS()添加。

CMAKE_C_COMPILER:指定C编译器

CMAKE_CXX_COMPILER:指定C++编译器

CMAKE_BUILD_TYPE::build 类型(Debug, Release, …),CMAKE_BUILD_TYPE=Debug

变量的使用

在CMakeLists.txt中指定,使用set

cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: