我该如何使用CMake?

132

我正在尝试使用CMake编译OpenCV。

我在阅读教程,但不理解什么是CMakeLists文件以及它与CMake图形界面的连接?

同时,我也不理解什么是makefile,它们与CMakeLists文件是相同的吗?

最后,我需要使用Visual Studio打开哪个文件?


如果问题与Windows有关,则应在其中提到(可能带有“windows”标签) - Basile Starynkevitch
关于 CMake 3.13.3,Windows 平台和 Visual Studio 2017 IDE,我建议参考以下链接:https://www.wikihow.com/Use-CMake。谢谢。 - George Theodosiou
6个回答

206

我不了解 Windows(从未使用过),但在 Linux 系统上,你只需要创建一个构建目录(在顶级源目录中)

mkdir build-dir

进入它

cd build-dir

然后运行cmake并指向父目录

cmake ..

最后运行make

make
注意,makecmake是不同的程序。cmake是一个Makefile生成器,而make实用程序由Makefile文本文件控制。请参见cmakemake 维基百科页面。

注意:在Windows上,cmake可能会有所不同,因此可能需要不同的使用方法。您需要阅读文档(就像我为Linux所做的那样)。


6
好的答案;我无法弄清楚如何获取子目录中的构建文件。我不明白为什么官方文档没有提到这一点。 - TheBigB
这在Linux下可以工作,但在Windows上检测C/C++编译器时会出现错误。有什么想法吗? - bartlomiej.n
1
这取决于你的电脑设置。检查你的 PATH 变量是否正确。顺便说一下,我从未在我的生活中使用过 Windows(并且在 1974 年编写了我的第一个程序)。 - Basile Starynkevitch
3
那么多的赞,但回答并没有提到Visual Studio。 - Abyx
2
据我所知,Visual Studio是一款专有的C++编译器(不同于Visual Studio Code,它是一个源代码编辑器),仅适用于Windows操作系统。我的回答是针对Linux的。 - Basile Starynkevitch

41

CMake接收一个CMakeList文件并将其输出为特定于平台的构建格式,例如Makefile、Visual Studio等。

首先要在CMakeList上运行CMake。如果您使用的是Visual Studio,则可以加载输出的项目/解决方案。


2
什么是Makefile?在哪里可以找到VisualStudio项目/解决方案文件呢? - lital maatuk
3
在运行cmake(或CMakeSetup并点击生成)之后,你应该能够在项目树的某个地方找到Makefile(如果是Unix系统)或项目文件。此位置可以在CMakeList中指定。这里有一个在CMake Wiki上找到的简短介绍,可能会对你有所帮助:http://www.elpauer.org/stuff/learning_cmake.pdf。 - holtavolt
2
CMake使用您选择的构建格式配置整个项目,这意味着它设置了一切,以便您可以使用例如Visual Studio进行编译。默认情况下(至少在Linux上),它创建一个使用Make的项目。 Make用于实际构建项目,而不是配置或设置它。因此,首先您需要使用CMake来设置项目,然后运行Make来编译和构建内容。 - leinaD_natipaC
“takes a CMakeList file”是什么意思?我该如何告诉它使用这个文件?在CMake UI中,我在哪里可以选择这个文件?没有“文件/打开”菜单或类似的东西。相反,它会问“源代码在哪里”,而我无法回答。我希望这些信息都在CMakeList文件中。 - Thomas Weller

13
是的,cmakemake是不同的程序。cmake是一个(在Linux上)Makefile生成器(而Makefile文件驱动make实用程序)。还有其他Makefile生成器(特别是configure和autoconf等...)。您可以找到其他构建自动化程序(例如ninja)。

我认为这有点令人困惑。cmake是一个构建系统生成器,它可以生成许多其他系统,而不仅仅是“Makefile生成器”(如https://www.gnu.org/software/make/)。在macOS(以及可能是其他任何地方),如果你运行cmake --help,它会给你一个长长的生成器列表。例如,cmake可以生成Xcode项目,与make没有任何关系。 - James Moore

9

CMake(跨平台构建系统生成工具)是一个构建系统生成器。它不会构建您的源代码,而是生成构建系统所需的构建脚本。这样做可以避免编写或维护特定于平台的构建文件。CMake使用相对较高层次的CMake语言通常写在CMakeLists.txt文件中。当使用第三方库时,您的一般工作流程通常归结为以下命令:

cmake -S thelibrary -B build
cmake --build build
cmake --install build

第一行是配置步骤,它会在您的系统上生成构建文件。-S代表源代码目录,而-B代表构建目录。CMake会根据您的系统自动生成构建方式。例如,在Windows系统上会使用MSBuild,在Linux系统上则使用GNU Makefiles。您可以使用-G参数指定构建类型,例如:

cmake -G Ninja -S libSource -B build

在此步骤结束后,会在构建目录中生成构建脚本,如Makefile, *.sln文件等。
第二行调用实际的构建命令,就像在构建文件夹中调用make一样。
第三行安装库。如果您使用的是Windows,可以通过cmake --open build快速打开生成的项目。
现在您可以使用已配置的CMake在自己的项目上使用已安装的库,编写您自己的CMakeLists.txt文件。为此,您需要创建一个目标,并使用find_package命令查找安装的包,该命令将导出库目标名称,并将其与您自己的目标链接起来。

7

在 Windows 终端中使用 Cmake:

mkdir build
cd build/
cmake ..
cmake --build . --config Release
./Release/main.exe

如果您想在build目录内的单独installdir子目录中包含文件,则可以执行以下操作:cmake -DCMAKE_INSTALL_PREFIX=./installdir .. - user3405291

0

关于CMake 3.13.3,Windows平台和Visual Studio 2017 IDE,我建议使用指南。简要来说,我建议:
1. 下载CMake > 解压缩 > 执行。
2. 例如下载GLFW > 解压缩 > 在文件夹Build内创建。
3. 在CMake中浏览“源”> 浏览“构建”> 配置和生成。
4. 在Visual Studio 2017中构建您的解决方案。
5. 获取二进制文件。
谢谢。


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