VS2019开发Linux应用程序(二)

使用Cmake管理项目的跨平台C++应用程序

MSDN参考文档:https://docs.microsoft.com/zh-cn/cpp/build/cmake-projects-in-visual-studio?view=msvc-160

使用CMake管理项目,再使用标准C++作为开发语言,就可以创建完全跨平台的C++应用程序。

1)创建CMake项目,从VS2019的项目解释可以看出,CMake是作为一个跨平台的管理工具存在,而不仅仅是Linux项目;

2)切换到CMake视图,这个很重要,因为默认为文件夹视图,不方便对子项目分别进行生成等操作:

切换到解决方案视图,找到这个按钮,单击一次:

出现选择视图,然后双击选中的视图类型,这里选择CMake目标视图,进入CMake开发视图:

这里就是CMake目标视图,右键单击项目,可以添加新的目标(即添加新的子项目),全部生成,清理等,同样单击某个项目也有类似的操作菜单:

这里解释下CMake缓存的意思:如果选择生成缓存,CMake会解析CMakeLists.txt文件,并生成CMake项目视图;必须这里有exe生成项目,也有dll生成项目,如果清除这些缓存,就只剩下CMakeLists.txt文件了。

需要注意的是,在输出栏需要选择不同的输出来源才能看到CMake过程,大多数默认都是生成输出来源,如果需要了解CMake的过程,可以切换到CMake来源。

3)添加一个名为Common的动态库项目:

//common.h

#pragma once

#ifdef _WIN32
#define COMMON_EXPORT _declspec(dllexport)
#else
#define COMMON_EXPORT
#endif // _WIN32

namespace BGI
{
	namespace Common
	{
		COMMON_EXPORT void add(int v1, int v2);
	}
}
//common.cpp

#include <iostream>
#include <chrono>
#include <thread>
#include "Common.h"

using namespace std;


namespace BGI
{
	namespace Common
	{
		static void threadproc(int* value)
		{
			for (int i = 0; i < 10; i++)
			{
				*value += 1;
				std::this_thread::sleep_for(std::chrono::milliseconds(100));
			}
		}

		void add(int v1, int v2)
		{
			thread t1(threadproc, &v1);
			thread t2(threadproc, &v2);
			t1.join();
			t2.join();
			cout << "Value[0] = " << v1 << endl;
			cout << "Value[1] = " << v2 << endl;
		}
	}
}

添加完成后选择生成试试。需要注意的是,如果要生成Windows下的动态库,还需要生成Common.lib文件,因此需要导出动态库接口:_declspec(dllexport);由于是跨平台项目,Linux项目无法设置导出接口,需要做宏限制。

4)在主项目上将Common子项目添加到引用,这一步会重新生成CMake缓存:

因为改变了主项目的CMakeLists.txt文件,增加了target_link_libraries(LinuxCmakeTest "Common")这一栏。这是CMake添加引用项目的方式。

5)重定向程序输出目录

给debug和release不同的输出目录;并将dll和exe都输出到同一个目录下,以免找不到dll的情况;并将输出目录设置为链接库搜索目录;将当前CMakeLists.txt所在目录设置为搜索目录,这样最大的好处是,在某个项目中包含其他项目的头文件,不必使用#include "../Common/common.h",而可以直接使用#include "Common/common.h"。

6)设置安装脚本。如果需要提供安装功能,添加install命令到CMakeLists.txt文件中:

保存文件后VS会自动重新解析文件,然后点击工程属性就可以看到【安装】菜单栏可用,点击安装,会将程序打包安装到\out\install\目录下。

可以通过CMake设置页面重定向安装目录路径:

install安装后的文件少了.ink,.pdb,.exp等额外文件。

到此为止,这个程序已经可以在Windows平台编译并输出结果。但配置到Linux仍需要一些额外的配置才能正确运行。

7)新建Linux平台下的CMake配置,这里选择通用的Linux-GCC-Debug,如果是Release则选择Linux-GCC-Release:

8)设置远程调试Linux平台:

9)设置完成后保存,自动解析CMakeLists.txt文件,如果远程没有安装高版本cmake文件,VS会自动提示,可以点击【是】让VS自动帮忙安装一个符合要求的cmake版本:

这里需要注意的是,CentOS默认安装cmake2.8,很旧很旧的版本。使用VS开发Linux至少需要cmake3.8版本以上。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章