CMake和Visual Studio是什么?

10

gcc 4.4.2 / Visual Studio C++ 2008

我一直在Linux上使用cmake,没有遇到任何问题。

现在我将我的应用程序移植到Windows上运行。

我使用 cmake -G "Visual Studio 9 2008 ../src" 生成了解决方案文件。

但是,我知道cmake只会创建一个Makefile,这个Makefile会被编译器用来构建你的应用程序。

我在Visual Studio中打开我的解决方案,按F7键进行编译。

我想知道它是否实际上使用了由cmake生成的Makefile?还是像普通的Visual Studio程序一样编译应用程序?

非常感谢您的任何建议,

3个回答

18

CMake 生成了一个 Visual Studio 解决方案和项目文件。

该解决方案包含至少三个项目:

  • ALL_BUILD
  • YourProject
  • ZERO_CHECK

该解决方案的构建流程是:当您构建项目(通过构建解决方案或构建项目)时,Visual Studio 会先构建 "YourProject",然后构建 ZERO_CHECK,从而运行 CMake 检查是否有任何更改。如果有更改,将重新生成解决方案和项目文件,并提示 Visual Studio 是否要重新加载。

程序的编译由 Visual Studio 完成,就像手动设置一样,但是 Visual Studio 将运行 CMake,因此检查是否有任何更改,并重新生成项目文件。


这是基本正确的,但 ZERO_CHECK 项目将在任何其他 Visual Studio 项目之前构建。CMake 生成的每个项目都直接依赖于 ZERO_CHECK,除了 CMake 的 INSTALL 项目,它只依赖于 ALL_BUILD(ALL_BUILD 又依赖于 ZERO_CHECK...)。 - Manuzor

11

CMake生成“真正的” .vcproj文件,因此Visual Studio将像任何常规的Visual Studio项目一样构建您的项目。没有涉及到makefile。


我感兴趣的部分是CMakeList.txt。编译器是否会对此进行任何操作?我之所以问是因为当我编辑我的CMakelists.txt时,由于我没有添加库名称“ws2_32”,我得到了一个链接错误。即TARGET_LINK_LIBRARIES(clt client ws2_32)。那么编译器如何使用CMakeLists.txt呢?谢谢。 - ant2009
3
CMake 会根据 CMakeLists.txt 文件中的信息为您创建 *.vcproj 文件。TARGET_LINK_LIBRARIES 命令告诉 CMake 在 *.vcproj 文件中放置必要的指令,以便 Visual Studio 编译器链接正确的库。 - JesperE

0

来自CMake网站:

CMake用于使用简单的平台和编译器无关的配置文件控制软件编译过程,并生成本地makefile和工作区,可在您选择的编译器环境中使用。

关键是它从编译器无关的配置文件(CMakeLists.txt文件)生成本地makefile和工作区

因此,使用CMake的第一步是从CMakeLists.txt生成本地构建文件,在Linux上是Makefiles,在Windows上是Visual Studio项目/解决方案。然后,您可以像从头开始创建本地构建文件一样进行编译/链接。

当您编辑CMakeLists.txt时,这意味着更改必须传播到本地构建方案。这可以通过显式重新运行CMake生成器或隐式通过Visual Studio解决方案中的ZERO_CHECK项目来完成。

CMake和Visual Studio有一个简单的示例,将CMake命令(存在于CMakeLists.txt中)映射到Visual Studio项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接