cmake 教程2
demo
cmake_minimum_required(VERSION 3.10)
project(Tutorial)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_executable(Tutorial tutorial.cxx)
基础
-
cmake_minimum_required
cmake的版本要求 -
project
项目的名字,同时会生成许多的变量名
-
add_executable
生成目标,在cmake中生成目标
只有两个方式分别是add_library和add_execute,生成库目标和可执行目标。
进阶
在上面的demo中可以看到有个set(CMAKE_CXX_STANDARD 11)的变量设置,不用说也知道这个是要求C++使用-std=c++11。那么如果不设置的话,CMAKE_CXX_STANDARD 默认是多少?
实际上CMAKE_CXX_STANDARD如果不设置的话, cmake是不会设定这个变量的,这个变量是cmake预先占用的变量名。目的是利用这个变量来初始化CXX_STANDARD 这个属性值。 伪代码如下:
if(DEFINED CMAKE_CXX_STANDARD)
SETPROPERTY(CXX_STANDARD CMAKE_CXX_STANDARD )
else()
SETPROPERTY(CXX_STANDARD CXX_STANDARD_DEFAULT)
endif()
- 属性是实际存在的,而预占用变量名不存在,需要有定义才会出现。
- 属性是指target的属性,也就是只有可执行文件和库才有属性
- 当add_executable 和 add_library的时候,cmake其实会默认调用属性值, 下面这行命令也可以起到同样的效果。 这也说明了为啥set命令要放在add_executable之前了,不然CXX_STANDARD就不会生效。
cmake_minimum_required(VERSION 3.10)
project(Tutorial)
add_executable(Tutorial tutorial.cxx)
set_property(TARGET Tutorial CXX_STANDARD 11)
cmake预占用变量名
下面的命令可以查看:
cmake --help-variable-list
cmake属性值
下面的命令可以查看:
cmake --help-property-list