【问题标题】:cmake and visual studiocmake 和视觉工作室
【发布时间】:2010-03-13 06:17:06
【问题描述】:

gcc 4.4.2 / Visual Studio C++ 2008

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

现在我已经通过应用程序移植到 Windows 上运行。

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

但是,我知道 cmake 只创建一个 Makefile,编译器使用它来构建您的应用程序。

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

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

非常感谢您的建议,

【问题讨论】:

    标签: cmake


    【解决方案1】:

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

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

    • ALL_BUILD
    • 你的项目
    • ZERO_CHECK

    设置解决方案,以便在您构建项目(通过构建解决方案或构建项目)时构建“YourProject”,然后构建 ZERO_CHECK,导致 cmake 运行并检查是否有任何更改。如果有任何更改,将重新生成解决方案和项目文件,Visual Studio 会询问您是否要重新加载。

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

    【讨论】:

    • 这基本上是正确的,但是 ZERO_CHECK 项目将在任何其他 Visual Studio 项目之前构建。 CMake 生成的每个项目都有对 ZERO_CHECK 的直接构建依赖,除了 CMake 的 INSTALL 项目,它只依赖于 ALL_BUILD(它又依赖于 ZERO_CHECK...)
    【解决方案2】:

    CMake 生成“真实”的 .vcproj 文件,因此 Visual Studio 将像构建任何普通 Visual Studio 项目一样构建您的项目。不涉及任何生成文件。

    【讨论】:

    • 我很好奇的部分是 CMakeList.txt。编译器是否对此做任何事情。我问的原因是当我编辑我的 CMakelists.txt 时出现链接错误,因为我没有添加库名称“ws2_32。即 TARGET_LINK_LIBRARIES(clt client ws2_32)。那么编译器如何使用 CMakeLists.txt?谢谢。
    • CMake 根据 CMakeLists.txt 文件中的信息为您创建 *.vcproj 文件。 TARGET_LINK_LIBRARIES 命令告诉 CMake 在 *.vcproj 文件中放入必要的指令,以便 Visual Studio 编译器链接到正确的库。
    【解决方案3】:

    来自 CMake 网站:

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

    关键是,它从独立于编译器的配置文件(CMakeLists.txt 文件)生成native makefile 和工作区

    因此,使用 CMake 的第一步是从 CMakeLists.txt 生成 native 构建文件,在 Linux 上是Makefiles,在 Windows 上是 Visual Studio projects/solution。然后编译/链接就好像原生构建文件是从头开始创建的一样。

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2018-06-11
      相关资源
      最近更新 更多