[英]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,我已经看到通常的步骤是: cmake
, make
, sudo 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。
release
的父目录中。 CMake调用的最后一个参数表示路径是CMakeLists.txt文件所在。 release
是构建目录。 您可以找到所有生成的文件并使用它们。 安装是可选的,特别是如果您要开发软件,则不安装它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.