我是编程新手,所以这是一个比技术问题更抽象的问题。我一直在使用IDE来学习,但我听说在创建可执行文件时,它们往往会过于简化编译、汇编和链接的行为。
我试图在不依赖IDE (在本例中是librocket)的情况下下载和编译库。我首先必须使用Cmake来创建二进制文件。配置并生成后,我在输出目录中看不到任何目标文件或.cpp文件。然后我不得不使用gnu make命令,该命令随后在输出目录中创建了目标文件和.cpp文件。
Cmake和gnu从下载源代码到实际创建目标文件有哪些步骤?编译器和链接器实际上是在什么时候调用的?
我已经成功地编译了一个我编写的测试库,然后使用g++编译了另一个链接到它的程序,但我有点迷茫,因为我必须使用Cmake和gnu make,而不是直接调用编译器。
发布于 2014-08-10 03:19:57
Cmake是一个“项目生成器”。它实际上并不构建任何目标文件等;它所做的是为其他工具(如GNU make)生成控制文件,这些工具将构建目标文件等。
如果您编写的软件需要构建在许多不同的平台上,那么cmake通常是一个很好的选择。
对于您的情况,它是这样的: cmake (仅)生成一组makefile。当你有一个干净的工作区时,你通常只做一次。然后运行make,当各种文件发生变化时,它会根据需要使用这些makefile来调用编译器。如果任何cmake输入文件发生更改,makefile还具有重新运行cmake本身的规则。
发布于 2020-01-07 20:07:02
在编译包含大量文件的大型项目时,如果直接调用编译器,可能会迷失方向。
当然,您可以将相关命令放在脚本中并运行它,但是如果您添加/删除文件,则需要更新脚本。此外,在这种情况下,您可能不希望每次进行小更改时都重新编译所有内容,因此您只希望编译更改过的部分。如果您将此(以及其他生活质量)功能添加到您的连字符脚本中,您将彻底改变make。
make被设计为只运行在您上次调用make之前更改过的代码部分的编译。它还允许你自动添加源文件等。
但是,如果您希望您的代码在几个不同的编译器和几个不同的平台上工作,并链接到不同的库等等,那么对于make来说事情就有点复杂了。你仍然可以做到这一点,但这是一项大量的工作。
cmake为您想要的系统构建makefile(或类似的构建系统,例如: Visual Studio)。cmake为不同的编译器和系统预先构建了配置文件,这些配置文件将自动找到正确的编译器标志集,找到指向正确库的链接,等等。
当然,如果你正在写一个"Hello World!“或者类似的程序,你既不需要make也不需要cmake。如果你不需要支持多个编译器/平台,你就不需要cmake。但是,如果您正在开发一些大型的库/应用程序,make和cmake将帮助您更轻松地完成工作。
https://stackoverflow.com/questions/25221869
复制相似问题