一、变量的引用方式是使用“${}”,在IF中,不需要使用这种方式,直接使用变量名即可

二、自定义变量使用SET(OBJ_NAME xxxx),使用时${OBJ_NAME}

三、cmake的常用变量:

CMAKE_BINARY_DIR, PROJECT_BINARY_DIR :这两个变量内容一致,如果是内部编译,就指的是工程的顶级目录,如果是外部编译,指的就是工程编译发生的目录。

CMAKE_SOURCE_DIR, PROJECT_SOURCE_DIR:这两个变量内容一致,都指的是工程的顶级目录。

CMAKE_CURRENT_BINARY_DIR:外部编译时,指的是target目录,内部编译时,指的是顶级目录

CMAKE_CURRENT_SOURCE_DIR:CMakeList.txt所在的目录

CMAKE_CURRENT_LIST_DIR:CMakeList.txt的完整路径

CMAKE_CURRENT_LIST_LINE:当前所在的行

CMAKE_MODULE_PATH:如果工程复杂,可能需要编写一些cmake模块,这里通过SET指定这个变量

LIBRARY_OUTPUT_DIR, BINARY_OUTPUT_DIR:库和可执行的最终存放目录

PROJECT_NAME, CMAKE_PROJECT_NAME:前者是当前CMakeList.txt里设置的project_name,后者是整个项目配置的project_name

四、cmake中调用环境变量

1. Using $ENV{NAME} : 调用系统环境变量,我们也可以使用 "SET(ENV{NAME} value)". 需要注意的是这里"ENV"没有"$".

2. CMAKE_INCLUDE_CURRENT_DIR 等同于 INCLUDE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

五、其他的内置变量

BUILD_SHARED_LIBS: set the default value when using ADD_LIBRARY()

CMAKE_C_FLAGS: set compiler for c language

CMAKE_CXX_FLAGS: set compiler for c++ language

六、区分debug和release

在工程build目录下执行 cmake .. -DCMAKE_BUILD_TYPE=DEBUG|RELEASE,再执行make, 或者在顶级CMakeList.txt里加入: set(CMAKE_BUILD_TYPE Debug|Release|MinSizeRel|RelWithDebInfo)

七、指定编译32bit或64bit程序

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")

八、通过cmake打印能获取到的所有系统环境变量

# 在CMakeList.txt中使用

execute_process(

COMMAND ${CMAKE_COMMAND} -E environment

)

# 在终端中使用

cmake -E environment

九、设置install路径

// 命令行里设置

cmake -DCMAKE_INSTALL_PREFIX=

// 或者在根cmake里设置

SET(CMAKE_INSTALL_PREFIX )

默认安装路径是/usr/local

十、获取绝对路径和父目录

# 获取文件绝对路径

get_filename_component(FULL_NAME "${FILE}" ABSOLUTE)

# 获取文件父路径

get_filename_component(PARENT_DIR "${FULL_NAME}" PATH)

十一、判断操作系统平台及Win是否为32位

if(CMAKE_SYSTEM_NAME MATCHES "Linux") // 注意区分大写

message(STATUS "Linux platorm!")

elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")

if(CMAKE_CL_64)

message(STATUS "Windows Win64 platform!")

else()

message(STATUS "Windows Win32 platform!")

endif(CMAKE_CL_64)

elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")

message(STATUS "FreeBSD platform!")

else()

message(STATUS "other platform!")

endif(CMAKE_SYSTEM_NAME MATCHES "Linux")

Logo

更多推荐