【问题标题】:Using cmake on windows for c++在 Windows 上为 c++ 使用 cmake
【发布时间】:2012-03-26 19:11:11
【问题描述】:

连续 5 天左右,我一直在尝试使用 c++ 环境设置我的计算机,以便使用 sdl、glm、opengl 等库进行编程。能够在 Unix 机器上运行它对我们来说很重要,所以我使用 cmake 运行。 我终于让它与 cmake-gui 一起工作,我什至不会再尝试使用任何 IDE。

我指定了我的文件夹项目以及构建二进制文件的位置,我得到了一个文件夹“CMakeFiles”以及一个 txt“CMakeCache”、一个 CMAKE 文件“cmake_install.cmake”和一个文件“Makefile”。在我的文件夹“CMakeFiles”中还有很多其他文件夹,例如“CMakeTmp”、“CompilerIdC”、“CompilerIdCXX 等”,并且在这两个文件夹中,“Compiler*”都有一个 .exe 不起作用!那么我想要的可执行文件在哪里?

我打开 cmd 并导航到我的文件夹并尝试按照我们应该按照指令执行的方式编写“make”。唉,它没有很好地工作。希望您能分享您的智慧并帮助像我这样的新手!

那么编译包含额外库的项目究竟需要什么?到目前为止,我有一个编译器,Mingw32,最新的 CMake,并使用 cmake-gui 来提取二进制文件,但得到了 makefile。

编辑: hrrm。只有我会遇到这些问题吗?我可以补充一点,我已经看透了大约 10 个教程,并且 90% 的步骤是相似的(如果使用我最初尝试的 VS 编译):

  • 下载最新的 SDL
  • 在例如 C:\SDL 上创建一个文件夹,其中包含两个文件夹,include 和 lib
  • 从下载的 SDL 复制库和包含
  • 新建 VS 项目,打开 VC++ 目录并添加 lib/incl 文件夹,例如 C:\SDL
  • 添加到链接器 SDL.lib 和 SDLmain.lib(我确保它们已链接,这里没有问题)
  • 将系统更改为 WINDOWS(如果您不想要两个窗口,则可选)
  • 在“其他库”中添加了包含
  • 将 SDL.dll 文件(我从最新的 SDL 中获得)放入我的 C:\windows\system32(64SysWoW) 也在我的项目文件中。

所以我真正想要的是让 CMake 工作,因为它成功地生成和构建源(使用 gui),我觉得我正在接近。我是否需要从 sdl 添加任何其他库到我的编译器 mingw32 和/或 cmake?

【问题讨论】:

  • 很难确切知道这里出了什么问题。尝试从cmake.org/cmake/help/cmake_tutorial.html 复制教程的第 1 步,看看是否适合您。如果没有,请准确发布无效的内容。
  • 使用 CMake 为您的项目生成 Visual Studio 项目文件,然后使用 Visual Studio 进行编译。
  • @karlphillip 我也这样做了(使用 vs 10 express)并运行编译的文件,并设法构建文件并得到“1 成功,e 0 失败,1 最新,1跳过”,当我按下播放时,我得到:C:\........\Debug\ALL_BUILD 系统找不到指定的文件
  • @jkerian 他们正在使用 C 我看到了,我正在使用 C++。我也没有任何问题,运行正常文件,我可以通过使用 Visual Studio 来做到这一点。此外,当我包含 sdl 库时,我没有收到任何错误,它在我运行时不起作用;因为我设法编译没有任何问题。我已经在线学习了许多教程,我在 vs 中设置了所有变量,包括目录、库目录、附加目录、Windows 系统、多线程 dll 和 ofc 包括“SDL.lib SDLmain.lib”。

标签: c++ cmake


【解决方案1】:

如果你通过命令运行 cmake:

cmake -G "Visual Studio 14 Win64" path\to\source\dir

您需要运行此命令才能继续(在 Visual Studio 命令提示符中):

msbuild Project.sln

如果你运行 cmake:

cmake -G "NMake Makefiles" path\to\source\dir

您需要运行此 cmd 才能继续(在 Visual Studio 命令提示符中):

nmake

【讨论】:

    【解决方案2】:

    您几乎可以使用 Visual Studio。选择 Visual Studio 作为目标。在 Visual Studio 中打开生成的项目,构建它。 (就像你已经做过的那样)。然后,与其尝试运行 BUILD_ALL,不如运行一个创建可执行文件的真实项目,它也应该在该列表中。只需右键单击它并“播放”它。

    如果您仍然遇到错误,请详细发布它们,包括您在错误之前所做的事情。注意:精心配置的跨平台 CMake 项目(又名 CMakeLists.txt)不应该需要对 VC++ 目录进行任何摆弄。它应该自动运行,尤其是在使用 SDL 等知名库时。

    【讨论】:

    • 哇,确实有效。当我需要在 ubuntu 上运行这个 VS 项目时,我可以复制整个项目文件夹并希望再次编译它而不会出现问题?
    • 取决于您对“项目文件夹”的定义:) Cmake 需要以下工作流程:在包含源文件和 CMakeLists.txt 的目录中运行 CMake。根据平台生成一些项目文件。使用生成的项目文件运行 IDE 或其他工具来编译项目。 (如Make+GCC、Visual Studio、...)
    • 雅曼:你需要复制所有的 CMakeFiles 并在 Ubuntu 下再次运行 cmake。你不能指望两个不同的系统在同一个地方安装相同版本的库。 CMake 正是出于这个原因 - 允许在异构环境中进行项目配置。
    【解决方案3】:

    如果我理解正确,您想在您的项目中使用 CMake。我在所有项目中都使用 CMake。由于我使用的是 Arch Linux,但我在 Windows 7 中也使用过。

    1. 为了让 CMake 找到库,通常需要设置 CMAKE_PREFIX_PATH 环境变量,使其指向安装项目依赖项的目录。
    2. 设置您的 PATH 环境变量,以便您可以调用编译器并通过调用例如调用来生成。 make. 我认为对于 Mingw32,您需要手动操作,对于 Visual Studio,您可以使用已设置这些变量的“Visual Studio Command Propt”。
    3. 使用所需的生成器运行 CMake。要从命令行选择生成器,请使用 -G 开关。您可能会使用以下之一(... 表示您要传递给 cmake 的其他选项)

      对于 MinGW 中使用的 GNU make,请使用 cmake -G "MinGW Makefiles" ...

      对于 Visual Studio 中的 NMake,请使用 cmake -G "NMake Makefiles" ...

      也可以创建一个 Visual Studio 项目,但我不推荐这样做,因为那时设置自动构建非常困难。当我尝试使用 VS 项目时,我也遇到了一些依赖问题。

    4. 将目录更改为您的构建目录(即您调用cmake 的目录,它包含CMakeCache 文件)并运行makenmake

    【讨论】:

      【解决方案4】:

      引自“CMake support in Visual Studio”:

      Visual Studio 2017 引入了对处理 CMake 项目的内置支持。这使得开发使用 CMake 构建的 C++ 项目变得更加简单,而无需从命令行生成 VS 项目和解决方案。这篇文章概述了 CMake 支持,以及如何在 Visual Studio 中轻松入门并保持高效。

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 1970-01-01
        • 2020-08-12
        • 2014-04-30
        • 2012-04-04
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多