Cmake,gnu make和手动编译之间的区别

时间:2014-08-09 18:44:45

标签: cmake gnu-make

我是编程新手,所以这是一个抽象的问题,而不是技术问题。我一直在使用IDE来学习,但我听说在创建可执行文件时,他们倾向于过度简化编译,汇编和链接的行为。

我正在尝试下载和编译库而不依赖于IDE(在本例中为librocket)。我首先必须使用Cmake来创建二进制文件。配置和生成后,我没有在输出目录中看到任何目标文件或.cpp文件。然后我不得不使用gnu make命令,然后在输出目录中创建目标文件和.cpp文件。

从下载源代码到实际创建目标文件的步骤是Cmake和gnu make吗?在什么时候编译器和链接器实际调用?

我已经成功编译了一个我编写的测试库,然后编译了另一个使用g ++链接到它的程序,但我有点丢失,因为我必须使用Cmake和gnu make而不是直接调用编译器。

1 个答案:

答案 0 :(得分:27)

Cmake是一个“项目生成器”。它实际上并没有构建任何目标文件等。它的作用是生成其他工具(如GNU make)的控制文件,这些工具将构建目标文件等。

使用cmake而不是直接编写makefile的优点是,使用相同的cmake输入文件,cmake可以为各种不同的构建控件工具生成项目文件:除了makefile之外,它还可以生成Xcode(Mac OS X) )项目文件,Microsoft Visual Studio项目文件和Ninja等其他工具的控制文件。如果您正在编写需要在许多不同平台上构建的软件,那么cmake通常是一个不错的选择。

对于你的情况,它是这样的:cmake生成一组makefile(仅)。通常只有在具有干净的工作空间时才执行此操作。然后运行make,当各种文件发生变化时,make会根据需要使用这些makefile来调用编译器。如果任何cmake输入文件发生变化,makefile还有重新运行cmake的规则。