CMake全称Cross-Platform Makefile Generator
1. 选项
① -D
格式:-D var=value
作用:给变量var赋值value,以在CMakeLists.txt中引用
2. 命令
① cmake_minimum_required
功能:设置cmake的最低版本限制,若实际cmake版本低于此版本,执行结束且打印错误
示例:cmake_minimum_required(VERSION 2.6)
② project
功能:设置整个项目的名称
示例:project(jovacct)
③ option
格式:option(var "descriptive string" value)
功能:
检查变量是否在命令行中定义过,如果定义过则将var重新设置为定义值,如果没有定义过则将var设为value
命令行定义变量即 cmake -D var=value
文件CMakeLists.txt中是否定义过变量,对option没有影响
示例:
④ message
格式:message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" args)
功能:打印输出,根据级别的不同决定是否终止执行
示例:message("Build type: " ${CMAKE_BUILD_TYPE})
⑤ if
格式:if(expression) ... else(expresion) ... endif(expression)
说明:
◇ 若expression为常量
当值为1, ON, YES, TRUE, Y, 非0数字时,结果为true;
当值为0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, 空字符串, 或以后缀'-NOTFOUND'结尾时,结果为false
如果参数不是上述常量值之一,则视为变量
◇ 若expression为变量,则只要变量值不是false常量中的一个,结果都为true,否则结果为false
示例:
if(var) 判断变量是否为true
if(NOT expression) 取反,表达式不为true则结果为true,否则结果为false
if(EXISTS file) 文件存在则为true,不存在则为false
if(DEFINED var) 变量过定义则为true,没有定义为false,无论变量值是true是false都不要紧
if(var STREQUAL "Debug") if(var1 STREQUAL var2) 判断字符串值是否相等
⑥ set
格式:set(var value1 value2 ...)
功能:给变量var赋值
说明:
变量var的原值被覆盖;
值参数可以为空,即set(var)合法,当值参数为空时,效果等同于unset(var),即删除指定的变量,使其变成未定义的;
⑦ aux_source_directory
格式:aux_source_directory(dir var)
功能:收集指定目录中所有源文件(.c或.cpp)及同名头文件(.h)的名称,并将其以追加的方式存储到变量var的末尾
说明:
变量var的原值保持不变,新值以追加的方式被添加到末尾;
只有同名的头文件(.h)会被添加到变量中;不同名的头文件,即便被某个源文件引用了,也不会被添加;
示例:
假设var=dce.h,目录dir中存在以下三个文件:db.h,dbhelper.h,db.cpp,且db.cpp同时包含了头文件db.h和dbhelper.h
则执行aux_source_directory(dir var)后,var=dce.h db.h db.cpp
使用:
若源文件中包含子目录,则将子目录中的源文件添加到项目的方法为:
set(var macro.h header.h ...)
aux_source_directory(subdirectory var)
aux_source_directory(. var)
⑧ include_directories
格式:include_directories(dir1 dir2 ...)
功能:设置头文件搜索路径
说明:使用时,通常先将各头文件目录存储到用户变量中,例如DEFAULT_INCLUDE_PATH,然后执行include_directories(${DEFAULT_INCLUDE_PATH})
3. 变量
① CMAKE_SOURCE_DIR
说明:源码树顶层目录路径
使用:可以通过${CMAKE_SOURCE_DIR}获取源码树顶层目录路径
② CMAKE_CURRENT_SOURCE_DIR
说明:当前CMakeLists.txt文件所在的目录路径
使用:可以通过${CMAKE_CURRENT_SOURCE_DIR}获取当前目录路径
示例:
在attempt/CMakeLists.txt中:
${CMAKE_SOURCE_DIR}=/path/attempt;
${CMAKE_CURRENT_SOURCE_DIR}=/path/attempt;
在attempt/subdirectory/CMakeLists.txt中:
${CMAKE_SOURCE_DIR}=/path/attempt;
${CMAKE_CURRENT_SOURCE_DIR}=/path/attempt/subdirectory;
③ CMAKE_BINARY_DIR
说明:构建树顶层目录路径
使用:可以通过${CMAKE_BINARY_DIR}获取构建树顶层目录路径
④ LIBRARY_OUTPUT_DIRECTORY
说明:库文件的输出目录
使用:可以通过set命令对该变量进行设置,以指定库文件的生成目录
⑤ EXECUTABLE_OUTPUT_PATH
说明:可执行文件的输出目录
使用:可以通过set命令对该变量进行设置,以指定可执行文件的生成目录