cmake 基本使用

目录

CMake都有什么?

使用cmake一般流程为:

1 生成构建系统

使用命令在build外编译代码:

cmake基本语法

指定使用最低版本的cmake

指定项目名称

指定生成目标文件的名称

指定C++版本

cmake配置文件使用

cmake配置文件生成头文件

版本号定义方法一:

版本号定义方法二:

如果想在cmake文件中定义变量,代码中使用值

参考:


CMake都有什么?

CMake提供cmake、ctest和cpack三个命令行工具分别负责构建、测试和打包。本文主要介绍cmake命令。

使用cmake一般流程为:

  1. 生成构建系统(buildsystem,比如make工具对应的Makefile);

  2. 执行构建(比如make),生成目标文件;

  3. 执行测试、安装或打包。

1 生成构建系统

通过cmake命令生成构建系统。

通过cmake --help可以看到cmake命令支持的详细参数,常用的参数如下:

参数 含义
-S 指定源文件根目录,必须包含一个CMakeLists.txt文件
-B 指定构建目录,构建生成的中间文件和目标文件的生成路径
-D 指定变量,格式为-D =,-D后的空格可省略

 demo1:

cmake 基本使用_第1张图片

1.是配置时间,2是构建时间. 

 至于为什么在cmake后加 -G "Unix Makefiles"是因为我使用的是win10系统,如果不加这个,cmake会编程成VS2015的sln文件.

cmake -S . -B build

cmake 基本使用_第2张图片

 上面的是编译生成makefile文件,你还需要cd进build文件make一下才可以生成可执行文件,其实也可以不进入build文件就可以编译.就是在使用下面的命令.

cmake 基本使用_第3张图片

使用命令在build外编译代码:

cmake --build build

 这个命令就是编译命令,需要注意的是,第一个 --build是必须写的,第二个build是生成makefile的文件夹,如果你存放的makefile文件夹不是build而是 qwer你的命令应该是这么写

cmake --build qwer

cmake基本语法

指定使用最低版本的cmake

cmake_minimum_required(VERSION 3.20)

指定项目名称

project(Tutorial)

指定生成目标文件的名称

add_executable(Tutorial tutorial.cxx)

指定C++版本

设置C++11 版本

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

cmake配置文件使用

configure_file(TutorialConfig.h.in TutorialConfig.h)
target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")

这行代码是添加头文件的代码,第一个参数是把头文件链接到Tutorial这个生成文件中,第二个是共有的也有私有的,重点是第三个变量"${PROJECT_BINARY_DIR}"(不加双引号也可以${PROJECT_BINARY_DIR})这个是一个目录,是project项目-B生成makefile文件的目录.因为configure_file要把cmake的.in配置文件生成头文件,生成的目录就是在 

-B 的目录所以要添加这个,要不然会找不到头文件的.

cmake配置文件生成头文件

这行命令就是cmake的配置文件生成c++头文件当然前面的文件名可以随便起.

configure_file(TutorialConfig.h.in TutorialConfig.h)

版本号定义方法一:

 TutorialConfig.h.in 配置文件中的内容

cmake 基本使用_第4张图片

 需要注意的是1的位置是宏定义可以随便写,后面的两个@符号中间的必须是PROJECT_VERSION_MAJOR而2号的之所以写成Tutorial是因为在cmake中定义了project是Tutorial所以也可以写成那样子的.但是还是建议写成PROJECT_VERSION_MINOR这样的.

cmake 基本使用_第5张图片

注意:@PROJECT_VERSION_MAJOR@一定要这么写多加一个空格都不行如果@PROJECT_VERSION_MAJOR @如果在@字符之间加了一个空格编译就会失败. 

cmake 基本使用_第6张图片 头文件生成的样子,第一行就是错误的,第二行才是对的

cmake 基本使用_第7张图片

 为什么会有出这个错误?

是因为我在写demo的时候,由于vscode安装了代码格式的差价在按下ctrl + s保存代码的时候vscode总会自动的就帮我加了一个空格,所以才会出这个错误的.

 

在代码中使用宏定义才行,也就是上面1号的宏在代码中可以读取.其中的主版本号为1,副版本号为0是因为cmake中设置的版本号1号是主版本,2号是副版本号 

 cmake 基本使用_第8张图片

cmake 基本使用_第9张图片

版本号定义方法二:

配置文件必须使用 PROJECT_VERSION_MAJOR

cmake 基本使用_第10张图片

cmake文件定义版本号.我喜欢这个定义版本号的方法. 

 

如果想在cmake文件中定义变量,代码中使用值

首先在cmake文件中定义一个变量:

set(CXX_HELL "qwerty") 想在代码中打印qwerty这个值.

在配置文件中这么设置

#define CXX_HELL "@CXX_HELL@"

 需要注意的是"@CXX_HELL@"一定要加上引号要不然就不是字符串了.

如果你想打印数字可以不加双引号:

例如:

cmake 基本使用_第11张图片cmake 基本使用_第12张图片

1号不加双引号也是字符串,2号是定义的int型cmake文件中其实也是字符串,只是在cmake配置不加双引号就成了int型的了. 

 还有个细节就是在cmake文件中定义的变量一定要在configure_file(TutorialConfig.h.in TutorialConfig.h)前,要不就识别不到了

 

参考:

CMake应用:基础篇_cmake -s_老狼主的博客-CSDN博客

CMake基础教程01-基本起点_哔哩哔哩_bilibili

你可能感兴趣的:(cmake,学习,c++)