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。我通常采取的步骤是:cmake
,make
,sudo 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将结果/可执行文件放入安装路径
答案 0 :(得分:8)
CMake为其他构建系统生成文件。这些可以是Visualfile或Eclipse等IDE的Makefile,Ninja文件或项目文件。构建文件包含对GCC,Clang或cl.exe等编译器的调用。如果安装了多个编译器,则可以选择一个 这三个部分都是独立的。编译器,构建系统和CMake。
当你有历史时,它更容易理解。人们使用他们的编译器随着时间的推移,添加了这么多标志,每次输入它们都很麻烦。所以把调用放在脚本中。由此构建系统(Make,Ninja)进化而来 人们想要支持多个平台,编译器,场景等,并且构建系统文件变得难以维护并且它们的使用容易出错。这就是人们发明为实际构建系统创建文件的元构建系统的原因。例如Autotools或CMake。
release
的父目录中。 CMake调用的最后一个参数表示路径是CMakeLists.txt文件所在。release
是构建目录。您可以找到所有生成的文件并使用它们。安装是可选的,特别是如果您要开发软件,则不要安装它。