cmake中预定的变量
CMAKE_PROJECT_NAME 返回通过PROJECT指令定义的项目名称,如果当前cmake文件没有定义,向上查找。
CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR target编译目录
CMAKE_SOURCE_DIR 顶层CMakeLists.txt所在的路径
CMAKE_BINARY_DIR 顶层编译目录
CMAKE_LIBRARY_OUTPUT_DIRECTORY 目标动态库文件的存放位置
CMAKE_RUNTIME_OUTPUT_DIRECTORY 目标二进制可执行文件的存放位置
CMAKE_ARCHIVE_OUTPUT_DIRECTORY 目标静态库文件存放位置
CMAKE_C_FLAGS 设置C编译选项
CMAKE_CXX_FLAGS 设置C++编译选项
CMAKE_BUILD_TYPE 控制Debug和Release模式
CMAKE_INSTALL_PREFIX 控制make install安装位置
CMAKE_VERBOSE_MAKEFILE 设置是否输出编译信息,on表示输出,等同于:make VERBOSE=1
CMAKE_CXX_FLAGS_DEBUG 设置c++debug选项,如:"-g -Wall"
CMAKE_CXX_FLAGS_RELEASE 设置c++release选项,如:"-O2 -Wall"
EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
PROJECT_SOURCE_DIR 工程的根目录
PROJECT_BINARY_DIR 运行cmake命令的目录
系统信息
CMAKE_MAJOR_VERSION cmake主版本号,如2.8.6中的2
CMAKE_MINOR_VERSION cmake次版本号,如2.8.6中的8
CMAKE_PATCH_VERSION cmake补丁等级,如2.8.6中的6
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
常用命令
cmake_minimum_required 设置cmake版本要求
cmake_minimum_required(VERSION 2.6)
建议放在顶层CMakeLists.txt文件的第一行。
project 指定工程名称
project(helloworld)
这个指令后,PROJECT相关的属性才能生效。
set 定义变量
set(SRC_LIST test.cpp main.cpp)
message 输出信息
message("PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}")
add_executable 生成可执行文件
add_executable(helloworld ${SRC_LIST})
add_executable(helloworld test.cpp main.cpp)
add_library 生成库文件
add_library(test SHARED test.cpp) #生成动态库libtest.so
add_library(test STATIC test.cpp) #生成静态库libtest.a
set_target_properties 设置输出的名字,设置动态库的版本和API版本
set_target_properties(test PROPERTIES VERSION 1.2)
该指令会设置动态库的版本,如:libtest.so.1.2,同时会建立软连接。
add_subdirectory 添加源文件子目录,并可以指定中间二进制和目标二进制的存放位置
add_subdirectory(common)
add_subdirectory(common ${binary_dir})
include_directories 添加头文件搜索路径
include_directories(/usr/local/include ../include/)
相当于-I参数。
link_directories 添加非标准的共享库搜索路径
link_directories(/usr/local/thrift/lib ../lib/)
相当于-L参数。
target_link_libraries 为target添加需要链接的共享库
target_link_libraries(helloworld hello)
相当于-l参数。
add_definitions 向C/C++编译器添加-D定义
add_definitions(-D_DEBUG_ -DLINUX)
add_dependencies 定义target依赖的其他target
add_dependencies(helloworld hello)
编译依赖,控制模块编译顺序。
aux_source_directory 发现一个目录下所有的源文件并存储在变量中
aux_source_directory(./src/ SRC_LIST)
用于自动定义源文件。
install 安装文件
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h DESTINATION ${CMAKE_BINARY_DIR}/include)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in DESTINATION ${CMAKE_BINARY_DIR}/include/ RENAME config.h)
install(PROGRAMS ${CMAKE_BINARY_DIR}/test ${CMAKE_BINARY_DIR}/bin)
make install时使用该指令。
include 包含指令
INCLUDE(file [OPTIONAL]) 用来载入CMakeLists.txt文件
INCLUDE(module [OPTIONAL])用来载入预定义的cmake模块
OPTIONAL参数的左右是文件不存在也不会产生错误
可以载入一个文件,也可以载入预定义模块(模块会在CMAKE_MODULE_PATH指定的路径进行搜索)
载入的内容将在处理到INCLUDE语句时直接执行
参考:
http://blog.csdn.net/wzzfeitian/article/details/40963457
https://cmake.org/cmake/help/v3.8/
https://cmake.org/cmake/help/cmake2.6docs.html