很多小白在在第一次接触CPP项目时,不知道如何运行一个完整的CPP项目,本文介绍了如何构建一个CPP项目,注意本文不提及
CMakeList.txt
,只针对CMakeLists.txt文件已经给出的情况下,如何构建CPP项目
项目构建
项目构建工具链
工具 | 作用 | 类似的工具 | 举例说明 |
---|---|---|---|
Clang | 编译器 | g++, MSVC | 把 .cpp 编成 .exe |
CMake | 生成构建系统文件 | qmake, autotools | 把 CMakeLists.txt 变成 Makefile /.sln |
Ninja | 实际的构建工具 | make, MSBuild | 按 build.ninja 快速构建代码 |
项目构建流程
创建构建系统文件目录
安装好上述工具链后,在项目根目录下新建一个build
目录,并进入该目录
1 | mkdir 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 | C:/Users/Vodka/Desktop/ass1-master/ass1-master/src/word_break.cpp:52:12: |
这个错误信息说明代码在编译时被开启了非常严格的警告作为错误(-Werror
)。
这是因为我们在编写的源文件中,有类型不匹配的问题,比如我们直接将 int 类型和 size_t 类型进行比较,产生警告,而因为我们开启了-Werror
,将警告直接视为报错,终止项目构建。
为了避免对我们的源代码进行大篇幅的修改,我们可以将放宽编译警告,在CmakeLists.txt
中将Werror
项注释掉,然后重新构建即可。