本文指在学习练习如何使用VS2019建立一个CMake类型的工程,该工程可以跨Windows和Linux进行编译、运行。
1 学习目标
1.1 技术目标
- 学习VS2019 CMake工程的使用
- 学习跨平台的编译
1.2 具体内容
- 使用Windows上的VS 2019,生成跨平台工程
- 在VS2019中编写程序,程序目标输出结果:
- 在windows平台输出:Hello windows!
- 在linux平台输出:Hello linux!
- 在其他平台输出(如果能运行的话):Hello unknown!
- 工程可Windows10下编译、运行
- 工程可以Centos 8.1.19下编译、运行:Centos 8.1.19,采用虚拟机
2 VS2019建立项目
2.1 建立CMakeHello项目
- 在Windows上建立文件夹,用于存放解决方案和本工程
打开文件资源管理器或者命令行方式创建文件夹:D:\vs2019_C_ex\cmake_helloworld
【大家可据自己实际情况建立自己的文件夹,具体操作不再赘述】
- 在VS2019中建立解决方案和项目
选择【文件】-【新建】-【项目】,或者使用快捷键Ctrl+Shift+N,见下图:
选择CMake项目,参见下图,然后点击【下一步】:
【项目名称】输入:CMakeHello
【解决方案名称】:采用默认,与项目名称相同
【位置】选择上面创建的文件夹 D:\vs2019_C_ex\cmake_helloworld\,参见下图,然后点击【创建】:
然后界面如下。看右面解决方案资源管理器视图—文件夹视图,看到生成了一个解决方案—CMakeHello,解决方案文件夹下又生成了一个CMakeHello项目文件夹,同时还生成了一个out文件夹。注意:使用Windows文件资源管理器打开查看,也是同样,本来此处显示的就是解决方案资源管理器视图—文件夹视图,哈哈。
我们通过双击可依次打开各文件夹,参见下图:
2.2 默认程序编译执行
VS2019已经为我们生成了一个默认的程序。
占击下图中紫色框中的运行按钮,可以运行程序。
程序运行结果会输出:Hello CMake. 参见下图:
3 VS2019编写程序
3.1 在VS中修改程序
双击打开CMakeHello.h,增加如下源码:
增加内容:
//据当前操作系统,定义PLATRORM
#if defined(__linux__)
#define PLATFORM "linux"
#elif defined(_WIN32)
#define PLATFORM "windows"
#else
#define PLATFORM "unknown"
#endif
修改后的文件参见下图:
双击打开CMakeHello.cpp,修改源码,修改后的源码如下:
// CMakeHello.cpp: 定义应用程序的入口点。
//
#include "CMakeHello.h"
using namespace std;
int main()
{
cout << "Hello "<< PLATFORM <<"!" << endl;
return 0;
}
实际上只修改下面这一行:
cout << "Hello "<< PLATFORM <<"!" << endl;
3.2 在VS中执行程序
执行方式同上面,执行结果参见下图,输出为:Hello windows!
4 Windows上编译运行
4.1 编译生成可执行程序
- 首先进入命令行窗口
从【开始】-【Visual Studio 2019】-【x64_x86 Cross Tools Command …】,进入命令行窗口。
命令行窗口参考截图如下:
- 使用cmake进行编译
执行命令如下:
D:\
cd D:\vs2019_C_ex\cmake_helloworld\CMakeHello
mkdir out_win
cd out_win
cmake ../
编译截图参考如下:
执行后在out_win下生成VS工程,可以使用VS2019打开并编译。我们在刚才的解决方案中也可以看到,因为我们的out_win放到了CMakeHello的解决方案目录下了。 我们选择out_win下的CMakeHello下的CMakeHello.vcxproj,参见下图:
右击上图所选,出现界面如下:
选择【生成】或者【重新生成】,生成可执行程序。
输出栏可以看到可执行程序的路径为:
D:\vs2019_C_ex\cmake_helloworld\CMakeHello\out_win\CMakeHello\Debug\CMakeHello.exe
4.2 执行程序
打开另一个普通命令行窗口,执行程序
命令如下:
D:\
cd D:\vs2019_C_ex\cmake_helloworld\CMakeHello\out_win\CMakeHello\Debug\
CMakeHello.exe
运行结果参见下图,因为是windows平台,所以输出:Hello windows!
5 Linux上编译运行
5.1 所用操作系统及编译器
操作系统为:Centos 8.1.1911
执行如下命令查看:
cat /etc/redhat-release
参见下图:
此处使用的gcc 版本为:
执行如下命令查看:
gcc –version
g++ –version
参见下图:
5.2 CMake下载安装
如果没有安装CMake,可采用下面两种方式进行安装。
联网安装方式
yum -y install cmake
参考截图如下,可看出我安装的版本为3.11,VS2019中要求的是3.8版本即可。
下载后安装方式
下载链接地址:https://cmake.org/download/
选择下载版本:cmake-3.19.4.tar.gz
具体安装不再叙述。
5.3 将程序copy到linux机器上
把D:\vs2019_C_ex\cmake_helloworld\CMakeHello目录下的以下内容copy到linux上的/home/vs2019_ex下面:
除了out和out_win两个目录之外的所有内容。
具体操作方法不再介绍。
5.4 编译生成可执行程序
进入CMakeHello工程主目录,建立build目录用于保存编译过程中产生的文件及编译结果,然后进入build目录进行编译,具体命令如下:
/home/vs2019_ex/CMakeHello
mkdir build
cd build
cmake ../
参考截图如下:
显示CMake后生成的内容,并进行编译,具体命令如下:
ls
make
执行结果截图参考如下:
5.5 执行程序
所生成的执行程序位于build/CMakeHello下,进入到目录并执行程序,命令如下:
cd CMakeHello
ls
./CMakeHello
执行结果截图参考如下,输入结果为:Hello linux!