banner
How to build your first cpp project

C&Cpp项目构建流程

Scroll down

很多小白在在第一次接触CPP项目时,不知道如何运行一个完整的CPP项目,本文介绍了如何构建一个CPP项目,注意本文不提及CMakeList.txt,只针对CMakeLists.txt文件已经给出的情况下,如何构建CPP项目

项目构建

项目构建工具链

  • clang
  • ninja
  • cmake
    安装完毕后一定一定要添加环境变量,clang和cmake在安装引导中勾选即可,Ninja则需要自己手动添加系统变量。
工具 作用 类似的工具 举例说明
Clang 编译器 g++, MSVC .cpp 编成 .exe
CMake 生成构建系统文件 qmake, autotools CMakeLists.txt 变成 Makefile/.sln
Ninja 实际的构建工具 make, MSBuild build.ninja 快速构建代码

项目构建流程

创建构建系统文件目录

安装好上述工具链后,在项目根目录下新建一个build目录,并进入该目录

1
2
mkdir build
cd build

生成构建系统文件

然后使用这条命令,使用cmake识别在根目录下的cmakelists.txt,并指定构建工具ninja和编译器clang(对于C语言使用clang,CPP则为clang++

1
cmake .. -G "Ninja" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++

稍微等待一会儿,会在终端看到输出的构建信息,如果看到下面这样的信息,说明构建成功:

上面会出现一条Cmake Warning,表示我们有一条手动指定的变量在这个项目中没有被用到,就是我们指定的对于C语言的编译器,也就是clang,因为我们的项目中都是CPP文件,不需要用到对于C语言的编译器,这个无伤大雅。
最后一条我们看到,构建文件已经被写入build文件夹中了,说明构建文件已经成功生成。

项目可执行文件构建

build目录下运行下面命令:

1
cmake --build . 

然后会看见项目构建进程,构建完毕后我们可以在build目录下看见对应的可执行文件

比如我这里就可以看到两个测试可执行文件,说明文件构建成功

关于CmakeLists.txt编译选项

build目录下生成构建系统文件后,如果我们不修改CmakeLists.txt文件,直接构建项目:

1
cmake --build . 

可能会看见如下的报错信息

1
2
C:/Users/Vodka/Desktop/ass1-master/ass1-master/src/word_break.cpp:52:12:
error: comparison of integers of different signs: 'unsigned long long' and 'const int' [-Werror,-Wsign-compare] 52 | if (dp[0] >= INF) { | ~~~~~ ^ ~~~ 14 errors generated. [2/7] Linking CXX static library catch2_main.lib ninja: build stopped: subcommand failed.

这个错误信息说明代码在编译时被开启了非常严格的警告作为错误(-Werror
这是因为我们在编写的源文件中,有类型不匹配的问题,比如我们直接将 int 类型和 size_t 类型进行比较,产生警告,而因为我们开启了-Werror将警告直接视为报错,终止项目构建。
为了避免对我们的源代码进行大篇幅的修改,我们可以将放宽编译警告,在CmakeLists.txt中将Werror项注释掉,然后重新构建即可。

其他文章
cover
25-06-13
  • 25/06/13
  • 23:27
  • 日记
30+
Posts
8+
Diary
85+
fans
目录导航 置顶
  1. 1. 项目构建
    1. 1.1. 项目构建工具链
    2. 1.2. 项目构建流程
      1. 1.2.1. 创建构建系统文件目录
      2. 1.2.2. 生成构建系统文件
      3. 1.2.3. 项目可执行文件构建
      4. 1.2.4. 关于CmakeLists.txt编译选项