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版本以上。

 

 

 

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