在Windows上使用CMake进行C++编译

21

我已经尝试了约5天来设置我的计算机,以便使用诸如sdl、glm、opengl等库进行c++编程环境。对于我们来说,能够在演示时在unix机器上运行非常重要,所以我正在使用cmake。 最终我通过cmake-gui使其工作,我甚至不会再尝试任何IDE。

我指定了我的项目文件夹和二进制文件的构建位置,我得到了一个"CMakeFiles"文件夹,其中包括一个文本文件"CMakeCache",一个CMAKE文件"cmake_install.cmake"和一个文件"Makefile"。同时在我的"CMakeFiles"文件夹中有许多其他文件夹,比如"CMakeTmp","CompilerIdC","CompilerIdCXX"等等,在这两个文件夹中,"Compiler*"各自有一个.exe文件,但它们都无法使用!那么我的期望可执行文件在哪里呢?

我打开了cmd并导航到我的文件夹,并尝试编写"make",正如我们根据说明所做的那样。不过,结果并不理想。希望您能分享您的智慧,帮助像我这样的新手!

那么编译包含其他库的项目需要什么呢?到目前为止,我有一个编译器Mingw32,最新版本的CMake,使用cmake-gui来提取二进制文件,但得到了makefiles。

编辑:嗯,只有我遇到这样的问题吗?我可以补充说,我已经查看了大约10个教程,并且90%的步骤是相似的(如果首先尝试使用VS进行编译):

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

所以我实际上正在寻找的是让CMake工作,因为它可以成功生成和构建源代码(使用GUI),我感觉我已经接近成功了。我需要将任何额外的SDL库添加到我的编译器mingw32和/或CMake中吗?


很难确定这里出了什么问题。尝试复制 http://www.cmake.org/cmake/help/cmake_tutorial.html 教程的第一步,看看是否能解决问题。如果不行,请准确地说明哪里出了问题。 - jkerian
使用CMake为您的项目生成Visual Studio项目文件,然后使用Visual Studio进行编译。 - karlphillip
@karlphillip 我也用VS 10 Express做了同样的事情,运行了编译后的文件,并成功构建了文件,得到了“1个成功,0个失败,1个最新,1个跳过”的结果。但是当我按下播放键时,出现了以下提示: C:..........\Debug\ALL_BUILD 系统找不到指定的文件。 - Yaman Baron
@jkerian 我看他们在使用C,而我在使用C ++。 正常文件的运行对我来说没有任何问题,我可以使用Visual Studio来做到这一点。 当我包含SDL库时,我不会收到任何错误,只有当我运行它时才会出现问题;因为我成功编译了它,没有任何问题。我已经遵循了许多在线教程,将所有变量设置在VS中,包括目录、库目录、附加目录、Windows系统、多线程DLL,当然还包括“SDL.lib SDLmain.lib”。 - Yaman Baron
4个回答

12

如果您使用命令运行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

你需要在Visual Studio命令提示符中运行此命令以继续:

nmake

8
你在使用Visual Studio时已经接近成功了。选择Visual Studio作为目标,用Visual Studio打开生成的项目并构建它(就像你之前做的一样)。然后,不要尝试运行BUILD_ALL,在创建可执行文件的真实项目中运行它,这个项目也应该在列表中。只需右键单击它并“播放”即可。
如果仍然出现错误,请详细描述它们,包括出错前所做的操作。注意:精心配置的跨平台CMake项目(即CMakeLists.txt)不应需要与VC++目录进行任何调整。它应该自动工作,特别是对于诸如SDL等知名库。

哇,真的成功了。当我需要在Ubuntu上运行这个VS项目时,我只需复制整个项目文件夹,希望能够再次编译而无需遇到问题? - Yaman Baron
取决于您对“项目文件夹”的定义 :) CMake 期望以下工作流程:在包含源文件和 CMakeLists.txt 的目录中运行 CMake。根据平台生成一些项目文件。使用生成的项目文件运行 IDE 或其他工具来编译项目(例如 Make+GCC、Visual Studio 等)。 - Bob
Yaman:你需要在Ubuntu下复制所有的CMakeFiles并重新运行cmake。你不能期望两个不同的系统在相同的位置安装相同版本的库。CMake正是为了这个原因而存在——允许在异构环境中进行项目配置。 - stativ

2
如果我理解正确,您想在项目中使用CMake。我在所有项目中都使用CMake。我不会给你详细的步骤,因为我使用Arch Linux,但我也在Windows 7上使用过它。
以下是需要注意的几点:
1. 为了让CMake找到库,通常需要设置CMAKE_PREFIX_PATH环境变量,使其指向安装项目依赖项的目录。 2. 设置PATH环境变量,这样您就可以通过调用make命令来调用编译器和make。对于Mingw32,您可能需要手动设置,对于Visual Studio,您可以使用“Visual Studio命令提示符”,其中这些变量已经设置好。 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

0

引用自 "Visual Studio 中的 CMake 支持":

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


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