【CMake保姆级教程】私人定制内容
@TOC
前言
上篇文章我们讲解了CMake
的基本的简单使用,这篇文章我们来讲定义变量,指定C++标准,指定可执行文件输出的目录
一、定义变量
在CMake中,使用set()
,set
的语法如下:
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
在上面的set
中,参数的意义如下:
- VAR: 要定义的变量的名称。你可以自由选择一个有意义的名称来描述变量的用途。
- VALUE: 可选参数,表示将要存储在变量中的值。可以是一个字符串、一个数字或其他类型的数据。
- CACHE: 可选参数,用于指定变量是否应该被缓存。缓存变量在配置过程中会被保留下来,并且可以在后续的构建中使用。如果不需要缓存变量,可以忽略或将其设置为OFF。
- TYPE: 可选参数,用于指定变量的类型。在CMake中,有多种变量类型可用,包括路径、文件、布尔值等。根据变量的用途选择适当的类型。
- DOCSTRING: 可选参数,用于提供关于变量的简短文档说明。这个说明可以帮助其他开发人员理解变量的用途和含义。
- FORCE:则无论变量是否已经定义,都将使用新的值进行覆盖。如果不需要强制设置,可以忽略或设置为OFF。
具体使用如下:
set(myvar "Hello World")
注意:变量是不需要我们自己定义的,他会自动生成,在后面就可以直接使用!!!
同样的,变量后面的很多个参数,不仅可以使用空格,还可以使用分号:
set(myvar "H" "E")
set(myvar "L";"L")
当我们需要使用变量里面的值的使用需要这样:
${yourvar}
实际应用
当我们一个项目中有很多源文件的时候,如下:
├── add.cpp
├── func.cpp
└── main.cpp
我们就可以使用变量来保存我们的源文件:
cmake_minimum_required(VERSION 3.0.0)
project(test)
set(SRCLIST main.cpp add.cpp func.cpp)
add_library(funcs ${SRCLIST})
执行CMake
后可得下面:
二、指定使用的C++标准
在编写C++程序的时候,可能会用到C++11、C++14、C++17、C++20等新特性,那么就需要在编译的时候在编译命令中制定出要使用哪个标准:
$ g++ *.cpp -std=c++11 -o app
上面的例子中通过参数-std=c++11指定出要使用c++11标准编译程序,C++标准对应有一宏叫做DCMAKE_CXX_STANDARD
。在CMake中想要指定C++标准有两种方式:
1、在 CMakeLists.txt 中通过 set 命令指定
#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)
#增加-std=c++14
set(CMAKE_CXX_STANDARD 14)
#增加-std=c++17
set(CMAKE_CXX_STANDARD 17)
2、在执行 cmake 命令的时候指定出这个宏的值
#增加-std=c++11
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
#增加-std=c++14
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
#增加-std=c++17
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17
三、指定输出的路径
在CMake中指定可执行程序输出的路径,也对应一个宏,叫做EXECUTABLE_OUTPUT_PATH
,它的值还是通过set
命令进行设置:
set(HOME /home/CMake)
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
上面的路径,根据自己的电脑的路径去使用。
当我们运行CMake
后,我们的可执行文件就会出现在bin
文件夹中。
我指定的路径如下:
当我运行CMake
后,可执行文件就生成在这下面:
总结
本篇文章可以让我们知道set
设置变量的作用,以及如何使用set
来指定我们的C++标准和输出的文件路径。
- 点赞
- 收藏
- 关注作者
评论(0)