38

我得到了 Box2D 项目源代码并想编译它的测试平台部分。项目文件夹包含以下文件夹: freeglu glui testbed(a demo) helloword(a demo) Box2D Build CMakeFiles

所有不同的文件夹中有许多 CMakeLists.txt。我在想我应该 cmake 所有这些文件,以便在所有需要的地方创建 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。

4

3 回答 3

68

cmake是一个 Makefile 生成器。

当您调用时cmake [path],您要求它按照中给出的说明在当前目录中生成一个 Makefile[path]/CMakeLists.txt

通常cmake在工作的时候会输出一些信息,在没有错误的情况下,你可以输入“make”来执行你新创建的Makefile。

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

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

其实你可以把你的“build”目录放在任何地方,只要你给cmake最上面的CMakeLists.txt的正确路径。您甚至可以拥有多个构建目录。如果您同时需要多个不同的构建(使用不同的选项、不同版本的 gcc 等),这将非常有用

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

于 2012-09-02T15:54:31.327 回答
9

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

于 2012-09-02T14:15:41.130 回答
6

嗯,..是父文件夹的简写,所以它可能会根据它在Box2D_v2.2.1.

于 2012-09-02T14:14:52.537 回答