【问题标题】:Why do I do Cmake .. and make?为什么我要做 Cmake .. 并制作?
【发布时间】:2019-03-11 16:22:46
【问题描述】:

我正在尝试在 Amazon Linux 2 发行版上安装一些程序,出于某种原因,我必须从源代码编译一堆工具。

这是我的理解,我应该这样做:

cd my_source_code
./configure
make
make install

意图是:

  • ./configure 将检查我是否拥有所需的所有工具
  • make: 将源文件编译成我可以使用的二进制文件
  • make install:将上述二进制文件放置在可访问的地方

所有这些工具都要求我做不同的事情,例如:

./bootstrap
make
make install

./bootstrap.sh
./b2
./b2 install

cmake .
make
make install

我猜./boostrap 只是./configure 脚​​本名称不同。对吗?

对于cmake,为什么我必须同时做cmake和make?它们不一样吗?

我有点迷失了所有这些可能性。

【问题讨论】:

标签: bash unix makefile cmake


【解决方案1】:

是的,cmake . 是一个配置步骤,对应于 Autotools 中的 ./configure。运行此命令后,您将获得所需的任何构建文件 - 各种类型的 Makefiles、Visual Studio 项目等。

之后,您需要实际构建它们。对于Makefiles,您运行make,对于Visual Studio,您在IDE 中打开它并单击“构建”(或运行msbuild,如果您需要控制台)。

CMake 有--build 标志来自动调用底层构建系统,所以你也可以这样做

# configure
cmake .
# build
cmake --build .

【讨论】:

  • cmake 如何知道默认的构建系统?有没有办法让我检查我的默认构建系统是什么? (除了根据操作系统进行有根据的猜测之外)我假设在同一个操作系统上可能有不同的构建系统,这是真的吗?
  • 对于类 Unix 操作系统,默认值始终是“Makefiles”。对于 Windows,它默认为 NMake Makefiles, IIRC。
  • 如果您有多个构建系统,例如 Make 和 Ninja,该怎么办? CMake 是否默认使用操作系统自带的构建系统?
  • 正如我所说,默认是 makefile,无论安装了其他构建系统。
  • 对。我明白了。我的问题是 CMake 是根据操作系统进行猜测,还是使用某种系统的方式来查询默认构建系统。来自 CMake 文档:“cmake --build 命令行将启动底层构建系统工具”但它没有说明它如何确定底层构建系统工具(也没有说它总是 makefiles)。
【解决方案2】:

CMake 等效于运行./configure,但将autoconfautomake 组合成一个程序。生成 Makefile 的是 automakeCMake 在 Windows 上启动,不仅可以生成 Unix Makefiles 还可以生成 Visual Studio 项目和其他一些目标。

Make 级别非常低,不直接支持遍历目录结构的递归构建。 CMakeAutomake 是 Makefile 生成器,它们提供更高级别的抽象并提供创建递归构建的机制。

./bootstrap 通常具有创建 configure 脚本的步骤,该脚本通常不在 git repo 中,因为它是生成的。为方便起见,在创建源 tarball 时会包含 configure 脚本。

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2017-02-26
    • 2012-08-27
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多