了解CMake,make和GCC的角色

时间:2016-09-29 05:16:05

标签: gcc makefile cmake

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

2。从阅读此post开始,我的理解是:

a。这个" cmake和make"东西实际上在其实现中使用g ++ / gcc。 cmake和make stuffs基本上只是使用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与GCC和CMake时遇到了这个openCV tutorial。它使用:

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将结果/可执行文件放入安装路径

1 个答案:

答案 0 :(得分:8)

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中的所有内容都是正确的。