引言:在Windows系统中,经常以CMake和MinGW来构建C++工程项目,而代码编辑器可以自由选择,如果不用大型IDE(如Visual Studio,CLion)的话,可以选择一些小巧好用的编辑器(如VS Code, Sublime Text, Atom等)。下面将以一个温度转换程序为例,一步步说明CMake构建工程的流程。
1. 在开始之前,请确保CMake和MinGW已经安装完成,如果没安装,可以按照下面链接进行安装
(1)CMake安装教程 --> CMake
(2)MinGW安装教程 --> MinGW
2. 构建流程
如图1所示,CMake的整个构建流程简单清晰明了,其中,CMake主要是通过CMakeLists.txt配置文件指定要编译的源文件,工程项目的配置等。可以说,使用CMake就要掌握CMakeLists.txt文件的编写。之后分两步完成,首先根据源文件生成Makefiles,然后利用Makefiles编译得到可执行的目标程序。
图 1 CMake 构建工程流程
3. 工程项目结构:main.cpp是程序入口,build文件夹用于存放编译后产生的文件,include文件夹存放头文件,源文件存放于src文件夹中
\ConvertTemp
| main.cpp| CMakeLists.txt
|
+---build
+---include
| utils.h
|
\---src
utils.cpp
4. 实践出真知
4.1 声明转换函数:用你最喜欢的代码编辑器打开utils.h头文件,声明转换函数
/*华氏温度转为摄氏温度*/
float fahrenheitToCentigrade(float fahrenheit);
/*摄氏温度转为华氏温度*/
float centigradeToFahrenheit(float centigrade);
/*摄氏温度转为开尔文温度*/
float centigradeToKelvin(float centigrade);
4.2 实现转换函数:在utils.cpp文件实现utils.h中声明的函数
#include "../include/utils.h"
/*华氏温度转为摄氏温度*/
float fahrenheitToCentigrade(float fahrenheit){
return (fahrenheit-32) * (5.0/9.0);
}
/*摄氏温度转为华氏温度*/
float centigradeToFahrenheit(float centigrade){
return centigrade * (9.0/5.0) + 32;
}
/*摄氏温度转为开尔文温度*/
float centigradeToKelvin(float centigrade){
return centigrade + 273.15;
}
4.3 编写main.cpp
#include <iostream>
#include "include/utils.h"
using namespace std;
int main(int argc, char const *argv[])
{
float fTemp=0;
float cTemp=0;
float kTemp=0;
cout << "cTemp\t\t" << "fTemp\t\t" << "kTemp" << endl;
for (int i = 0; i < 100; i+=13)
{
cTemp = (float)i;
fTemp = centigradeToFahrenheit(cTemp);
kTemp = centigradeToKelvin(cTemp);
cout << cTemp << "\t\t" << fTemp << "\t\t" << kTemp << endl;
}
return 0;
}
4.4 编写CMakeLists.txt,一般简单的工程,下面的配置就足够了
# 设置支持的最低CMake版本号
cmake_minimum_required(VERSION 3.10)
# 设置工程项目名称
project(ConvertTemp)
# 指定源文件
add_executable(ConvertTemp main.cpp src/utils.cpp)
4.5 到这里代码已经完成,下面用命令行编译运行源代码
(1)打开power shell,进入到当前工程目录下,如果还没有build目录则创建一个,主要用于存放编译后产生的文件,然后依次执行下列命令
cd build
cmake -G "MinGW Makefiles" ..
cmake --build .
(2)如果报错,则修改后重复(1),直到正确运行,至此,可执行目标文件已经得到,运行该文件
.\ConvertTemp.exe
结果如下:
cTemp fTemp kTemp
0 32 273.15
13 55.4 286.15
26 78.8 299.15
39 102.2 312.15
52 125.6 325.15
65 149 338.15
78 172.4 351.15
91 195.8 364.15