2010-03-13 240 views
10

gcc 4.4.2/Visual Studio C++ 2008cmake和visual studio

我一直在linux上使用cmake,沒有任何問題。

現在我已經移植了應用程序在Windows上運行。

我使用cmake -G「的Visual Studio 9 2008 ../src」

但是,我知道,只是CMake的創建所使用的編譯器來構建應用程序Makefile文件生成的解決方案文件。

我在Visual Studio中打開我的解決方案,我按F7鍵編譯。

我想知道它實際上是否使用由cmake生成的Makefile?或者它只是像編譯任何普通的視覺工作室程序一樣編譯應用程序?

非常感謝任何建議,

回答

18

Cmake生成一個Visual Studio解決方案和項目文件。

該解決方案包含至少三個項目:

  • ALL_BUILD
  • YourProject
  • ZERO_CHECK

的解決方案是建立這樣,當你建立你的項目(通過構建解決方案,或生成項目)將構建「YourProject」,然後構建ZERO_CHECK,導致cmake運行並檢查是否有任何更改。如果有任何更改,解決方案和項目文件將被重新生成,Visual Studio會詢問您是否要重新加載。

您的程序的編譯由Visual Studio完成,就像您手動設置它一樣,但Visual Studio將運行cmake,從而檢查是否有任何更改,並且應該重新生成項目文件。

+0

這基本上是正確的,但ZERO_CHECK項目將在任何其他Visual Studio項目之前生成。CMake生成的每個項目都具有對ZERO_CHECK的直接構建依賴關係,除了CMake的INSTALL項目(僅依賴於ALL_BUILD)對ZERO_CHECK有依賴關係...) – Manuzor 2015-04-27 10:44:49

10

CMake的生成「真正」的.vcproj文件,因此Visual Studio將構建項目就像任何普通的Visual Studio項目。沒有涉及makefile。

+0

我很好奇的部分是CMakeList.txt。編譯器是否對此做了任何事情。我問的原因是當我編輯我的CMakelists.txt時,我得到一個鏈接錯誤,因爲我沒有添加庫名「ws2_32,即TARGET_LINK_LIBRARIES(clt client ws2_32)。那麼編譯器如何使用CMakeLists.txt?謝謝。 – ant2009 2010-03-13 17:02:20

+3

CMake根據CMakeLists.txt文件中的信息爲您創建* .vcproj文件。TARGET_LINK_LIBRARIES命令告訴CMake在* .vcproj文件中放入必要的指令,以便Visual Studio編譯器將鏈接到正確的庫。 – JesperE 2010-03-13 17:06:21