什么是cmake ..做什么?

时间:2012-09-02 14:13:04

标签: c++ makefile cmake box2d

我得到了Box2D项目源,想要编译它的testbed部分。 项目文件夹包含以下文件夹:freeglu glui testbed(演示版)helloword(演示版) Box2D构建CMakeFiles

所有不同文件夹中都有许多CMakeLists.txt。 我在想我应该编写所有这些文件,以便在所有需要的地方创建make文件。 我读了这个(作为我想要的指示):

wget http://box2d.googlecode.com/files/Box2D_v2.2.1.zip
unzip Box2D_v2.2.1.zip
cd Box2D_v2.2.1/Build
cmake ..
make

cmake做什么? 构建文件夹中没有CMakeLists.txt。

3 个答案:

答案 0 :(得分:44)

cmake 是一个Makefile生成器。

当您致电cmake [path]时,按照[path]/CMakeLists.txt

中的说明,要求生成当前目录中的Makefile

通常cmake在工作时输出一些消息,在完成没有错误之后,你可以输入“make”来执行新创建的Makefile。

CMakeLists.txt 文件可以引用子目录中的其他 CMakeLists.txt 文件,因此您通常只对 CMakeLists.txt 顶部目录的>,而不是其他目录。

使用空的“build”目录是一种称为“out-of-source build”的技术,其中所有生成的文件(.o,executable,Makefile,.anything)都在单独的“build”目录中生成,不与源文件混合。如果要清除所有内容,可以删除构建目录的所有内容。

实际上,只要您为cmake提供顶级CMakeLists.txt的正确路径,就可以将“build”目录放在任何位置。您甚至可以拥有多个构建目录。如果您需要同时使用多个不同的版本(使用不同的选项,不同版本的gcc等),这非常有用。

在旧程序中,您也生成Makefile,但使用./configure(这称为自动工具。您可能已经遇到过这种情况)。 cmake被认为是自动工具的继承者。

答案 1 :(得分:6)

cmake ..使用../CMakeLists.txt文件作为起始点,在当前目录中生成makefile。 make 命令,在此之后执行,使用生成的makefile作为输入构建程序。这样可以方便地保存源代码并在不同的文件夹中构建结果。一般语法是: cmake source-dir (当然,还有很多其他开关)。

答案 2 :(得分:3)

嗯,..是父文件夹的简写,所以它可能会根据Box2D_v2.2.1中找到的内容行事。