2010-03-13 303 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