一
变量
分类: 变量的'类型'、变量的'功能'
①
目的
++++++++++++梳理变量的'目的'++++++++++++
1)'看懂'别人的代码,知道执行'每条cmake指令'所处的'位置'
2)对比'变量'的'异同',更好的进行抉择
3)代码'规范',尽量保持'一种风格'
例外: 多个变量可以表示'同一个含义'时候,应根据'上下文'合理取舍
②
内置
命令
变量
${CMAKE_COMMAND} -->'cmake'
${CMAKE_MAKE_PROGRAM} -->'gmake|make'
③
系统信息
CMAKE_MAJOR_VERSION:cmake 主版本号,比如 3.4.1 中的 3
CMAKE_MINOR_VERSION:cmake 次版本号,比如 3.4.1 中的 4
CMAKE_PATCH_VERSION:cmake 补丁等级,比如 3.4.1 中的 1
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
④
环境变量
'设置'和'使用'环境变量
1)'设置'环境变量
set(ENV{变量名} 值)
备注:不需要加'$'符号
2)'使用'环境变量
$ENV{Name}
eg:message(STATUS "HOME dir: $ENV{HOME}")
1)
项目结构
2)
CMakeLIsts.txt
3)
测试
⑤ 关于
目录
的
预定义
变量
说明: 本文主要以'外部编译','多级'目录,讲解'目录结构'
涉及: CURRENT'中间'、CMAKE'开头'、PROJECT'开头'
1)
目录结构
2) CMakeLists.txt
备注: 根项目和subDir目录下的'CMakeLists.txt'关于message的信息'相同'
3)
测试
4)
补充
1) LIBRARY_OUTPUT_DIR -->重新定义'目标链接库文件'的存放目录
2) BINARY_OUTPUT_DIR -->'可执行二进制'存放的目录
3) CMAKE_MODULE_PATH -->工程复杂,编写一些cmake模块'[.cmake结尾的文件]',通过SET来指定这个变量
备注: ${PROJECT_SOURCE_DIR}/cmake),然后可以用'INCLUDE命令'来调用自己的模块
思考: '.cmake脚本'和'CMakeLists.txt'文件的区别?
4) EXECUTABLE_OUTPUT_PATH -->重新定义'目标二进制可执行文件'的存放位置
5) CMAKE_CURRENT_BINARY_DIR:'target' 编译目录
补充: 如果'内部编译',可以通过set方式'${}/build'形式自动创建对应目录,并在'build'里面编译
CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的区别
⑥ 主要
开关
选项
1)BUILD_SHARED_LIBS:这个开关用来'控制默认'的'库编译'方式
备注: 如果'不进行'设置,而使用 add_library 又'没有指定库类型'的情况下,'默认编译'生成的库都是'静态库'
eg:set(BUILD_SHARED_LIBS ON)后默认生成的为'动态库'
2)CMAKE_C_FLAGS:设置 'C 编译'选项,也可以通过指令 add_definitions() 添加
3)CMAKE_CXX_FLAGS:设置 'C++ 编译'选项,也可以通过指令 add_definitions() 添加
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
备注: add_definitions(-DENABLE_DEBUG -DABC) 参数之间用'空格'分隔
⑦
缓存变量
备注: CMakeLists.cache里面'默认'的CACHE变量
⑧
option变量
⑨
小结