c++ - cmake .. 做什么?

标签 c++ makefile cmake box2d

我得到了 Box2D 项目源代码,并想编译它的测试平台部分。 项目文件夹包含以下文件夹:freeglu glui testbed(a demo) helloword(a demo) Box2D 构建 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 .. 做什么? build文件夹中没有CMakeLists.txt。

最佳答案

cmake 是一个 Makefile 生成器。

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

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

CMakeLists.txt 文件可以引用子目录中的其他CMakeLists.txt 文件,所以您通常只对CMakeLists.txt top 目录,而不是其他目录。

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

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

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

关于c++ - cmake .. 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236642/

相关文章:

java - 为多个 .java 文件创建 java makefile (ubuntu)

c++ - 用于多个可执行文件的 CMake fixup_bundle

linux - 使用共享库的项目和使用该库的测试应用程序

CMAKE RPATH不起作用-找不到共享对象文件

c++ - 如何利用周期性来降低信号的噪声?

c++ - 我可以在 libleveldb.a 中找到该符号,但是当我创建共享库时,找不到相同的符号。怎么了?

c++ - 用C++设计文件传输协议(protocol)

c - GNU 使用 stem 制定隐式归档规则

c++ - 虚拟析构函数如何工作?

c - 使用makefile编译时如何设置GDB?