如何使用CMake?


102

我正在尝试使用CMake来编译opencv。

我正在阅读教程,但无法理解什么是CMakeLists文件以及如何将其连接到CMake的GUI?

也无法理解什么是makefile,它们与CMakeLists一样吗?

最终我通过visual-studio打开哪个文件?


如果问题与Windows有关,则应在其中提及(可能带有windows标签)
Basile Starynkevitch

关于CMake 3.13.3,平台Windows和IDE Visual Studio 2017,我建议:wikihow.com/Use-CMake问候。
乔治Theodosiou

Answers:


30

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

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


2
什么是Makefile?在哪里可以找到visualstudio的项目/解决方案文件?
lital maatuk 2011年

3
运行cmake(或CMakeSetup并单击generate)后,您应该能够在项目树中的某个位置找到Makefile(如果是unix)或项目文件。可以在CMakeList中指定位置。这是我在CMake Wiki上发现的简短介绍,可能会对您有所帮助:elpauer.org/stuff/learning_cmake.pdf
holtavolt

2
CMake使用您选择的构建格式配置整个项目,这意味着它设置了所有内容,以便您可以使用Visual Studio进行编译。默认情况下(至少在Linux上是这样),它会使项目改为使用Make。Make用于实际构建项目,而不是配置或设置项目。因此,首先您必须使用CMake设置项目,然后运行Make进行编译和构建。
leinaD_natipaC

156

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

mkdir build-dir

进去里面

cd build-dir

然后运行cmake并指向父目录

cmake ..

最后跑 make

make

请注意,makecmake是不同的程序。cmake是一个Makefile生成器,该make实用程序由Makefile文本文件控制。参见 cmake制作 Wikipedia页面。

注意:在Windows上,cmake可能会运行,因此可能需要不同地使用。您需要阅读文档(就像我在Linux上所做的一样)


cmake和make有什么区别?他们是不同的程序吗?
lital maatuk 2011年

4
好答案;我不知道如何在子目录中获取构建文件。我不明白为什么官方文档中没有提到这一点。
TheBigB

这在Linux下有效,但在Windows上,在检测C / C ++编译器时会中断。任何想法如何做到这一点?
bartlomiej.n

这取决于您如何设置特定计算机。检查您的PATH变量是否正确。顺便说一句,我一生中从未使用过Windows(并于1974年编写了我的第一个程序)
Basile Starynkevitch

2
如此多的投票,答案与Visual Studio无关。
Abyx

10

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


我认为这有点令人困惑。cmake是一个生成系统生成器,它可以生成的东西之一是makefile(如gnu.org/software/make所示)。不过,它可以生成许多其他系统,它们不是“ Makefile生成器”。在macOS上(可能还有其他地方),如果您运行cmake --help,它将为您提供一长串的生成器。例如,cmake可以生成Xcode项目-与make无关。
詹姆斯·摩尔

0

关于CMake 3.13.3,平台Windows和IDE Visual Studio 2017,我建议使用本指南。简而言之,我建议:
1.下载cmake>解压缩>执行它。
2.作为示例,下载GLFW>解压缩>在Build内部文件夹中创建
3.在cmake中,浏览“源”>浏览“构建”>配置并生成。
4.在Visual Studio 2017中构建您的解决方案。
5.获取二进制文件。
问候。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.