【问题标题】:What does cmake .. do?cmake .. 做什么?
【发布时间】:2012-08-27 12:41:22
【问题描述】:

我得到了 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。

【问题讨论】:

  • 但是“Box2D_v2.2.1”文件夹中应该有一个CMakeLists.txt文件。在“cmake ..”中,双点标记表示 CMakeLists.txt 文件存在于目录层次结构“Box2D_v2.2.1/Build/”的上一级目录中。

标签: c++ makefile cmake box2d


【解决方案1】:

cmake 是一个 Makefile 生成器。

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

通常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 被认为是自动工具的继承者。

【讨论】:

  • 啊!非常感谢!这消除了我的困惑。我曾尝试通过键入“cmake”“无”文件规范在包含 CMakeLists.txt 的文件中运行 cmake,但我想我看到了 cmake 的手册页。也许我没试过。:)
  • 如果我可以进一步扩展一点,实际的命令与我想象的不同。有一个cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON .. 而不仅仅是cmake .. 知道这意味着什么吗?
  • @learner 是的。通过向 cmake 调用添加选项,您可以提示它应该如何生成 Makefile,可能会激活某些功能或使用不同的模式。大多数情况下,您还可以通过键入“ccmake”来更改这些选项。 (注意点)在您的构建目录中。然后,您将有一个小界面列出 Makefile 生成选项。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    嗯,.. 是父文件夹的简写,因此它可能会根据在 Box2D_v2.2.1 中找到的任何内容进行操作。

    【讨论】:

    • @Alex Farber 和 Rook,当我在父文件夹中尝试 cmake 时,什么也没发生。它提供了某种 cmake 的指南。是否有必要深入1步并cmake上层目录?
    • 推荐的使用 CMake 的方法是没有源代码的,你最初在 Build 文件夹中使用 cmake .. 所做的。我不会试图打败它。
    猜你喜欢
    • 2021-10-14
    • 2018-11-01
    • 2015-10-25
    • 2019-03-11
    • 2020-10-29
    • 1970-01-01
    • 2012-02-29
    • 2023-03-21
    • 2014-04-29
    相关资源
    最近更新 更多