文章目录
- 准备工作
- 创建cmake文件
- 编译源代码
- 需要的文件不在同一个文件夹的情况
准备工作
首先我们准备三个文件
add.h
int add(int a,int b);
add.cpp
int add(int a,int b)
{return a+b;
}
main.cpp
#include "add.h"
#include <iostream>
int main()
{int a = 2, b = 3;std::cout<<add(a,b)<<std::endl;return 0;
}
创建cmake文件
我们创建一个CMakeLists.txt的文件,文件的名称区分大小写,必须命名为CMakeLists.txt,CMake才能够解析。
首先看一下我们的目录结构,在外层有一个CMakeLists.txt文件。
首先我们来编写最外层的CMakeLists.txt文件
cmake_minimum_required(VERSION 3.20)
project(cmake_study)
add_subdirectory(lesson1_1)
第一行,设置CMake所需的最低版本。如果使用的CMake版本低于该版本,则会发出致命错误。
第二行,声明了项目的名称(cmake_study)。
第三行,添加包含的子文件夹。
这时候cmake会认为进入了子文件夹中,所以这时候我们来看一下子文件夹中的CMakeLists.txt文件的编写。
add_executable(lesson1_1 main.cpp add.cpp)
指示CMake创建一个新目标:可执行文件lesson1_1。这个可执行文件是通过编译和链接源文件main.cpp和add.cpp生成的。CMake将为编译器使用默认设置,并自动选择生成工具。
这个过程类似于厨师炒菜,需要原材料指定给他,他就可以根据这些原材料做出你想要的菜。
编译源代码
现在,可以通过创建build目录,在build目录下来配置项目:
$ mkdir -p build
$ cd build
$ cmake ..
[main] 正在配置项目: cmake_study
[proc] 执行命令: "C:\Program Files\CMake\bin\cmake.EXE" --no-warn-unused-cli -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -SC:/cmake_study -Bc:/cmake_study/build -G "Visual Studio 17 2022" -T host=x64 -A x64
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Configuring done (0.0s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: C:/cmake_study/build
[visual-studio] 为 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat 修补从 C:\Program Files (x86)\Windows Kits\10\bin\x64 到 C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 的 Windows SDK 路径
如果一切顺利,项目的配置已经在build目录中生成。我们现在可以编译可执行文件:
使用命令cmake --build .就可以生成.exe文件
需要的文件不在同一个文件夹的情况
我们经常会遇到需要编译的文件在不同文件夹的情况
这时候我们需要修改我们的cmake文件
include_directories(../lesson1_1)
add_executable(lesson1_2 main.cpp ../lesson1_1/add.cpp)
include_directories命令用于指定包含的头文件路径。
总而言之,编写cmake最核心的内容就是让厨师可以找到所有的原材料来进行炒菜。