本文共 2174 字,大约阅读时间需要 7 分钟。
在 CMake 脚本中,变量的引用可以通过 ${} 的方式实现。需要注意的是,在某些特定语句中(如 IF、ELSE 等),变量引用不需要通过 ${} 而是直接使用变量名。
CMake 提供两种定义变量的方式:隐式定义和显式定义。
隐式定义通常通过某些 CMake 指令自动生成变量。例如,PROJECT 指令会隐式地定义 <projectname>_BINARY_DIR 和 <projectname>_SOURCE_DIR 这两个变量。
显式定义变量的方式是通过 SET 指令来实现的。例如:
SET(HELLO_SRC "main.SOURCE.PATHc")
通过 ${HELLO_SRC} 即可引用这个自定义变量。
CMAKE_BINARY_DIR 和 PROJECT_BINARY_DIR这两个变量在 in-source 和 out-of-source 编译模式下都指向工程编译发生的目录。PROJECT_BINARY_DIR 与 CMAKE_BINARY_DIR 的内容一致。
CMAKE_SOURCE_DIR、PROJECT_SOURCE_DIR 和 <projectname>_SOURCE_DIR这些变量均指向工程顶层目录,无论是 in-source 还是 out-of-source 编译模式,内容一致。
CMAKE_CURRENT_SOURCE_DIR指向当前处理的 CMakeLists.txt 所在的路径。例如,在 src 子目录中使用时,通常等于 <project根目录>/src。
CMAKE_CURRENT_BINARY_DIR如果是 in-source 编译,CMAKE_CURRENT_BINARY_DIR 等同于 CMAKE_CURRENT_SOURCE_DIR。如果是 out-of-source 编译,则指向目标编译目录。
CMAKE_MODULE_PATH用于定义 CMake 模块的路径。通过 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 可自定义模块目录。
EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH用于重新定义目标文件的存放目录。EXECUTABLE_OUTPUT_PATH 默认通常指向 CMAKE_BINARY_DIR。
CMAKE_CURRENT_LIST_FILE 和 CMAKE_CURRENT_LIST_LINECMAKE_CURRENT_LIST_FILE 输出调用该 CMakeLists.txt 的完整路径,CMAKE_CURRENT_LIST_LINE 输出当前处理的行号。
PROJECT_NAME通过 PROJECT 指令定义的项目名称。
在 CMake 脚本中,可以通过以下命令调用系统环境变量:
MESSAGE(STATUS "HOME dir: $ENV{HOME}") SET(ENV{变量名} 值) CMAKE_INCLUDE_CURRENT_DIR自动将 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 添加到当前 CMakeLists.txt 的包含目录中。
CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE用于将项目提供的头文件目录始终添加在系统头文件目录之前,避免冲突。
CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH用于指定 include 和 library 目录。这些路径会被自动添加到 CMake 的搜索路径中。
CMake 提供了多种变量来获取系统信息:
CMAKE_MAJOR_VERSION:主版本号(如 2.4.6 中的 2)CMAKE_MINOR_VERSION:次版本号(如 2.4.6 中的 4)CMAKE_PATCH_VERSION:补丁等级(如 2.4.6 中的 6)CMAKE_SYSTEM:系统名称(如 Linux-2.6.22)CMAKE_SYSTEM_NAME:不含版本的系统名称(如 Linux)CMAKE_SYSTEM_VERSION:系统版本(如 2.6.22)CMAKE_SYSTEM_PROCESSOR:处理器名称(如 i686)UNIX:在所有类 UNIX 平台上为 TRUE(包括 OS X 和 cygwin)WIN32:在所有 win32 平台上为 TRUE(包括 cygwin)通过 $ENV{NAME} 可以调用系统环境变量。
以上内容提供了 CMake 中变量引用的方式、变量的定义方法、常用变量的使用方法以及系统信息获取方式的全面解释。
转载地址:http://ifbpz.baihongyu.com/