gpt4 book ai didi

gcc - 了解 CMake、make 和 GCC 的角色

转载 作者:行者123 更新时间:2023-12-03 00:09:16 25 4
gpt4 key购买 nike

1. cmake 是来自 CMake 软件的命令:为构建自动化系统做准备; make 和 make install 是来自 Make software:构建自动化系统的命令。

2.阅读本文 post ,我的理解是:

a. 这个“cmake 和 make”实际上在其实现中使用了 g++/gcc。 cmake 和 make stuff 基本上只是使用 g++/gcc 的工具。这是正确的吗?

b. gcc/g++ 是执行实际工作的编译器。

c. 那么我可以直接使用 gcc/g++ 而不使用 make 和 CMake 的东西吗?

3.根据这个stackoverflow answer :CMake 获取 CMakeList.txt 文件,并将其输出为特定于平台的构建格式,例如 Makefile、Visual Studio 等。

但是当我遇到this时openCV安装:

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

它在没有 CMakeLists.txt 文件的目录中执行 cmake 命令。您能对此进行解释和详细说明吗?

4.我见过的通常步骤是:cmakemakesudo make install 。我读了这个 stackoverflow post ,我的理解是:

(i) make 用于构建项目。

(ii) make install 是将二进制/可执行文件复制到安装目录。

a.那么当我们make时,结果/二进制文件/可执行文件存储在哪里?

b.如果我们只运行make而不运行make install,是否意味着文件没有生成?

c.我遇到了这个openCV tutorial关于将 openCV 与 GCC 和 CMake 结合使用。它使用:

cd <DisplayImage_directory>
cmake .
make

为什么它不执行 make install 操作?

5.总结:

  • CMake 使用 CMakeList.txt 文件(跨平台)来生成 Makefile(特定于平台)。

  • 我可以手动编写 Makefile 并跳过 CMake 步骤。但最好使用 CMake 步骤,因为它是跨平台的,否则如果我更改平台,我必须再次重写 Makefile。

  • Make 采用 Makefile(由 CMake 生成或手动编写)作为编译和构建的指南。 Make 在工作中基本上使用 gcc/g++ 或其他编译器。 Make本身只是编译器的一个工具。

  • make install 将结果/可执行文件放入安装路径

最佳答案

CMake 为其他构建系统生成文件。这些可以是 Makefile、Ninja 文件或适用于 Visual Studio 或 Eclipse 等 IDE 的项目文件。构建文件包含对 GCC、Clang 或 cl.exe 等编译器的调用。如果您安装了多个编译器,则可以选择一个。
这三个部分都是独立的。编译器、构建系统和 CMake。

有了历史就更容易理解了。人们使用他们的编译器。随着时间的推移,他们添加了如此多的标志,以至于每次都输入它们很麻烦。因此他们将这些调用写入脚本中。构建系统(Make、Ninja)由此演变而来。
人们希望支持多个平台、编译器、场景等,而构建系统文件变得难以维护,并且它们的使用很容易出错。这就是人们发明元构建系统来为实际构建系统创建文件的原因。例如 Autotools 或 CMake。

  1. CMake 不使用您的编译器,make 不实现它,但它调用(使用)编译器。
  2. CMakeLists.txt 文件应位于 release 的父目录中。 CMake 调用的最后一个参数表示 CMakeLists.txt 文件所在的路径。
  3. 对了,make在build目录下生成了文件。在 3. release 的示例中,是构建目录。您可以找到所有生成的文件并使用它们。安装是可选的,特别是如果您想开发该软件,则无需安装它。
  4. 尝试为大型项目编写 Makefile,您就会发现工作量有多大。但是,是的,5 中的一切都是正确的。

关于gcc - 了解 CMake、make 和 GCC 的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com