1、定制变量
1.1、自定义变量
-
在上面的例子用,假设这五个源文件反复被使用,每次都直接把它们的名字写出来是一件很麻烦的事情,此时可以通过定义一个变了,将文件名字的字符换存储起来,在cmake里定义变量需要使用set。
# SET指令的语法:[]中的为可选参数,如果不需要刻意不写 # set(VARIABLE_NAME [VALUE] [ CACHE TYPE DOCSTRING [FORCE] ] ) # VARIABLE_NAME:变量名称 # VALUE:变量值 # []中的为可选指令
-
例如对于多文件编译,可以将源文件定义到一个变量里到处引用
# set定义的变量值之间以' '或者';'分隔开 # set(src_list main.cpp;mul.cpp;add.cpp;sub.cpp;dived.cpp) set(src_list main.cpp mul.cpp add.cpp sub.cpp dived.cpp) # 生成可执行程序依赖src_list中的变量值,通过${src_list}获取 add_executable(main ${src_list})
1.2、指定使用的C++标准
-
在编写C++程序的使用,可能会用到C++11、C++14、C++17、C++20、C++23等新特性,那么就需要在编译的时候在编译命令中制定出使用的C++标准
-
g++ *.cpp -o main -std=c++11
,其中的-std=c++11
参数制定出需要使用C++11标准编译程序,C++标准对应有一种宏叫做DCMAKE_CXX_STANDARD
,在Cmake中想要指定C++标准有两种方式 -
在CMakeLists.txt中通过set命令指定,其中
CMAKE_CXX_STANDARD
是系统变量# 使用C++11标准 set(CMAKE_CXX_STANDARD 11) # 使用C++14标准 set(CMAKE_CXX_STANDARD 14) # 使用C++17标准 set(CMAKE_CXX_STANDARD 17)
-
在执行cmake命令的时候指定出这个宏值
# 使用C++11标准 cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11 # 使用C++14标准 cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14 # 使用C++17标准 cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17
1.3、指定文件输出路径
Cmake中指定可执行程序的输出路径,也对应一个宏,叫做EXECUTABLE_OUTPUT_PATH
,它的值还是通过set命令进行设置
set(CURRENT_PATH ./)
set(EXECUTABLE_OUTPUT_PATH ${CURRENT_PATH}/bin)
set(CURRENT_PATH ./)
:定义一个变了用于存储获取当前路径set(EXECUTABLE_OUTPUT_PATH ${CURRENT_PATH}/bin)
:将拼接好的路径值设置给EXECUTABLE_OUTPUT_PATH
宏- 如果这个路径中出现不存在的路径,cmake会在编译阶段自动生成,无需自己手动创建
由于可执行程序是基于cmake命令生成的makefile文件,然后再执行make命令得到;所以如果此处指定可执行程序生成路基的时候使用的是相对路径./xxx/xxx
,那么这个路径中的./
对应的就是makefile文件所在的那个目录