前言
- cmake的内置命令不区分大小写
一. 目录路径变量
-
CMAKE_SOURCE_DIR
最顶层CmakeLists.txt所在目录
最顶层工程的源文件路径,即编译产物会存放到该路径(全路径/src) -
CMAKE_BINARY_DIR
最顶层工程的二进制路径,即编译产物会存放到该路径(全路径/build) - -
CMAKE_CURRENT_SOURCE_DIR
当前正在处理的CMakeLists.txt所在目录 -
CMAKE_CURRENT_LIST_DIR
当前正在处理的列表文件的完整目录.(自2.8.3开始)
当CMake处理项目中的列表文件时,该变量将始终设置为当前正在处理的列表文件(CMAKE_CURRENT_LIST_FILE)所在的目录.该值具有动态范围.当CMake开始处理源文件中的命令时,它将此变量设置为此文件所在的目录.当CMake完成处理来自文件的命令时,它将恢复先前的值.因此,宏或函数内部变量的值是调用调用堆栈上最底部条目的文件的目录,而不是包含宏或函数定义的文件的目录. -
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
设置静态库的输出目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out)
- **CMAKE_LIBRARY_OUTPUT_DIRECTORY **
设置动态库的输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
-
PROJECT_SOURCE_DIR
包含PROJECT()的最近一个CMakeLists.txt文件所在的文件夹(src) -
PROJECT_BINARY_DIR
当前工程的二进制路径,即编译产物会存放到该路径(build) -
EXECUTABLE_OUTPUT_PATH
设置可执行文件输出路径
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin/)
-
LIBRARY_OUTPUT_PATH
-
CMAKE_RUNTIME_OUTPUT_DIRECTORY
-
CMAKE_RUNTIME_OUTPUT_DIRECTORY
设置可执行文件输出路径
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/)
二. 检测变量
- CMAKE_HOST_SYSTEM_NAME
当前操作系统名字 - CMAKE_HOST_SYSTEM_PROCESSOR
当前运行主机CPU架构 - CMAKE_SYSTEM_NAME
构建目标操作系统名字 - CMAKE_SYSTEM_PROCESSOR
正在构建目标主机CPU的名称 - CMAKE_SIZEOF_VOID_P
检查空指针类型的大小。CMake的CMAKE_SIZEOF_VOID_P变量会告诉我们指针类型大小从而判断CPU是32位还是64位。
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CURRENT_PLATFORM "x64")
else()
set(CURRENT_PLATFORM "x86")
endif()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i386")
message(STATUS "i386 architecture")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i686")
message(STATUS "i686 architecture")
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
message(STATUS "x86_64 architecture")
else()
message(STATUS "host processor architecture is unknown")
endif()
target_compile_definitions(arch-dependent
PUBLIC "ARCHITECTURE=${CMAKE_HOST_SYSTEM_PROCESSOR}"
)
三. 编译选项变量
- CMAKE_CXX_COMPILER_ID
C++编译器ID - CMAKE_C_COMPILER_ID
C编译器ID - CMAKE_BUILD_TYPE
生成器的构建类型
CMAKE_CROSSCOMPILING
交叉编译
CMAKE_CXX_COMPILER_VERSION
编译器版本号