2008-12-27 86 views
79

我正在開發一個開源的C++項目,用於編譯Linux和Windows的代碼。我使用CMake在Linux上構建代碼。爲了便於開發設置和政治原因,我必須堅持在Windows上使用Visual Studio項目文件/編輯器(例如,我不能切換到Code::Blocks)。我看到使用CMake生成Visual Studio文件的說明,如here使用CMake生成Visual Studio C++項目文件

您以前使用CMake生成過Visual Studio文件嗎?你的經歷如何?假設我想將一個新文件添加到我的項目中。這是什麼工作流程?

回答

52

CMake其實對此很不錯。關鍵的部分是Windows上的每個人都必須記住在加載解決方案之前運行CMake,並且我們Mac端的每個人都必須記得在製作之前運行它。

最難的部分是作爲Windows開發人員確保您的結構更改位於cmakelist.txt文件中,而不是解決方案或項目文件中,因爲這些更改可能會丟失,即使不會丟失也不會轉移到Mac方面也需要他們,Mac的人也需要記住不要因爲相同的原因修改make文件。

這只是需要一點思考和耐心,但一開始就會有錯誤。但是如果你在雙方都使用continuous integration,那麼這些將會很早就被淘汰,人們最終會養成這種習慣。

+9

所取代。如果這是真實的一次,它不是任何更長的時間。對CMakeLists.txt所做的任何更改都將導致構建系統的重新生成(visual studio,makefiles等項目文件)。 Visual Studio中的工作流程很煩人,因爲Visual Studio在檢測到事件已更改時不會重新生成項目文件,而是等待您執行構建,從而導致出現對話框,因爲構建需要中止以重新構建 - 加載項目文件。 – Vitali 2011-08-20 07:16:14

+0

需要注意的是,您不必通過IDE運行Visual Studio編譯器。您可以在命令行上運行它:`C:\ ...> MSBuild ALL_BUILD.vcxproj` – PfunnyGuy 2017-11-14 18:53:16

10

正如Alex所說,它工作得很好。唯一棘手的部分是記住在cmake文件中進行更改,而不是在Visual Studio中進行更改。因此,在所有平臺上,如果您使用普通的舊makefile,工作流程類似。

但它的工作相當簡單,而且我沒有cmake生成無效文件或類似的東西的問題,所以我不會擔心太多。

26

我們將我們部門的構建鏈移至CMake,自從其他部門使用我們的項目文件並習慣於將其導入到他們的解決方案中之後,我們就有了一些內部路標。我們也對CMake沒有完全集成到Visual Studio項目/解決方案管理器有些抱怨,因此文件必須手動添加到CMakeLists.txt;這是人們習慣的工作流程中的重大突破。

但總的來說,這是一個非常平穩的過渡。我們非常高興,因爲我們不必處理項目文件了。

添加新文件添加到項目的具體工作流程是非常簡單的:

  1. 創建文件,確保它在正確的位置。
  2. 將文件添加到CMakeLists.txt。
  3. 構建。

如果任何CMakeLists.txt文件發生變化(和(半)自動重新加載解決方案/項目),CMake 2.6會自動重新運行。請記住,如果您正在執行源代碼構建,則需要小心不要在構建目錄中創建源文件(因爲Visual Studio只知道構建目錄)。

6

的CMake可以產生非常好的Visual Studio中.projs/.slns,但總是與需要修改.cmake文件,而不是.proj/.sln問題。因爲它是現在,我們正在處理,如下所示:

  1. 所有源文件去/src並在Visual Studio中可見的文件只是「鏈接」到他們.filter定義。
  2. 程序員添加/刪除記住在定義的/src目錄上工作的文件,而不是默認項目的目錄。
  3. 完成後,他運行一個腳本,用於「刷新」各自的.cmake文件。
  4. 他檢查代碼是否可以在重新創建的環境中構建。
  5. 他提交了代碼。

起初我們都有點害怕它會如何了結,但工作流程作品真的很好,與漂亮的差異可見每次提交之前,每個人都可以很容易地看到,如果他的變化在.cmake文件正確映射。

要了解的另一個重要內容是缺少CMake中「解決方案配置」的支持(afaik)。就目前而言,您必須生成兩個包含項目/解決方案的目錄 - 每個構建類型(調試,發佈等)都有一個。沒有直接支持更復雜的功能 - 換句話說:配置之間的切換不會給你你所期望的。

+3

從CMake 2.8.10開始,生成的解決方案具有4種慣用的構建配置,並且支持定義其他自定義配置。 – John 2014-01-29 17:46:29

36

不知道,如果它直接關係到這個問題,但我一直在尋找如何產生的cmake從項目我發現一個可以使用這樣的事情*的.sln答案:

cmake -G "Visual Studio 10" 

該示例通過輸入CMakeLists.txt文件生成所需的VS 2010文件

5

CMake無縫地生成Visual Studio項目和解決方案。您甚至可以爲不同的Visual Studio版本生成項目/解決方案,而無需對CMake文件進行任何更改。

添加和刪除源文件只是修改CMakeLists.txt,它具有源文件列表並重新生成項目/解決方案。甚至有一個globbing功能來查找目錄中的所有源(儘管它應該謹慎使用)。

以下鏈接非常好地解釋了CMake和Visual Studio的特定行爲。

CMake and Visual Studio

0

我已經開始自己的項目,叫做syncProj。從這裏文檔/下載鏈接:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

如果你打算使用Visual Studio進行開發,目前只支持C++。

與其他make系統相比,主要優勢在於您可以實際調試腳本,因爲它基於C#。

如果您對syncProj不熟悉,則可以將解決方案/項目轉換爲.cs腳本,並從該點開始繼續進一步開發。

在cmake中,您需要從頭開始編寫所有內容。

相關問題