了解CMake、make和GCC的角色

了解CMake、make和GCC的角色,gcc,makefile,cmake,Gcc,Makefile,Cmake,1.cmake是来自cmake软件的命令:为构建自动化系统做准备;make和makeinstall是来自makesoftware:buildautomationsystem的命令 2.通过阅读本文,我了解到: a.这种“cmake和make”的东西实际上在其实现中使用了g++/gcc。cmake和make Stuff基本上只是使用g++/gcc的工具。对吗 b.gcc/g++是执行实际工作的编译器 c.所以我可以直接使用gcc/g++而不用make和CMake 3.根据此stackoverflo

1.
cmake
是来自cmake软件的命令:为构建自动化系统做准备;make和makeinstall是来自makesoftware:buildautomationsystem的命令

2.通过阅读本文,我了解到:

a.这种“cmake和make”的东西实际上在其实现中使用了g++/gcc。cmake和make Stuff基本上只是使用g++/gcc的工具。对吗

b.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
。 我读了这篇文章,我的理解是:

(i)
制造
用于建造项目

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

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

b.如果只运行
make
而不运行
makeinstall
,是否意味着不生成文件

c.我是在将openCV与GCC和CMake一起使用时发现这个openCV的。它使用:

cd <DisplayImage_directory>
cmake .
make
cd
克马克。
制作
为什么它不同时进行
make install

5.总之:

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

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

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

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


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

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

  • CMake不使用编译器,make不实现它,但它调用(使用)编译器
  • CMakeLists.txt文件应位于
    release
    的父目录中。CMake调用的最后一个参数指示CMakeLists.txt文件所在的路径
  • 对,make在build目录中生成文件。在你的例子中,从3
    release
    是生成目录。您可以找到所有生成的文件并使用它们。安装是可选的,尤其是如果您想开发软件,您不需要安装它
  • 尝试为一个大型项目编写Makefiles,您将看到它的工作量有多大。但是,是的,5中的所有内容都是正确的

  • 谢谢你的回答。我想再次澄清第3点。最后一个参数是CMakeLists.txt的位置,在本例中,最后一个参数是..,这就是为什么CMakeLists.txt位于父目录中。。。如果我想指向我的当前目录,我使用一个点,是吗?@mon:是的,但这是一个源代码内版本,不鼓励这样做。源代码外构建更好,您可以删除完整的文件夹,重新开始。并且您的源目录不会被生成的文件弄乱。谢谢。有没有一本好书可以让你读更多关于这方面的内容?可能是