繁体   English   中英

了解CMake,make和GCC的角色

[英]Understanding roles of CMake, make and GCC

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

2.从阅读这个帖子 ,我的理解是:

一个。 这个“cmake和make”的东西实际上在其实现中使用g ++ / gcc。 cmake和make stuffs基本上只是使用g ++ / gcc的工具。 那是对的吗?

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

C。 所以我可以直接使用gcc / g ++而不使用make和CMake的东西?

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

但是当我遇到这个 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 文章 ,我明白了:

(i) make是用于建设项目。

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

一个。 所以当我们make ,结果/二进制文件/可执行文件存储在哪里?

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

C。 我遇到了这个openCV 教程,关于使用openCV和GCC以及CMake。 它用:

cd <DisplayImage_directory>
cmake .
make

为什么不make install呢?

5.总结:

  • CMake接受CMakeList.txt文件(跨平台)生成Makefile(特定于平台)。

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

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

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

CMake为其他构建系统生成文件。 这些可以是Visualfile或Eclipse等IDE的Makefile,Ninja文件或项目文件。 构建文件包含对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中的所有内容都是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM