我是编程新手,所以这是一个抽象的问题而不是技术问题.我一直在使用IDE来学习,但我听说它们在创建可执行文件时过于简化了编译,汇编和链接的行为.
我正在尝试下载和编译库而不依赖于IDE(在本例中为librocket).我首先必须使用Cmake来创建二进制文件.配置和生成后,我没有在输出目录中看到任何目标文件或.cpp文件.然后我不得不使用gnu make命令,然后在输出目录中创建目标文件和.cpp文件.
从下载源代码到实际创建目标文件的步骤是Cmake和gnu make吗?在什么时候编译器和链接器实际调用?
我已经成功编译了一个我编写的测试库,然后编译了另一个使用g ++链接到它的程序,但我有点迷失,因为我必须使用Cmake和gnu make而不是直接调用编译器.
Mad*_*ist 28
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的规则.
小智 11
编译包含大量文件的大型项目时,如果直接调用编译器,可能会迷路。
当然,您可以将相关命令放在脚本中并运行它,但是如果您添加/删除文件,则需要更新脚本。同样在这种情况下,您可能不想在每次进行小的更改时都重新编译所有内容,因此您只想编译已更改的部分。如果您在假设脚本中添加此(以及其他生活质量)功能,您将重新发明make
.
make
旨在仅运行在上次调用make
. 它还允许您自动添加源文件等。
但是,如果您希望您的代码在多个不同的编译器和多个不同的平台上工作,并链接到不同的库等,那么make
. 你仍然可以这样做,但这是很多工作。这是来的地方cmake
。
cmake
为您想要的系统构建 makefile(或类似的构建系统,例如:Visual Studio)。cmake
具有针对不同编译器和系统的预构建配置文件,这些配置文件将自动找到正确的编译器标志集,找到指向正确库的链接等。
当然,如果您正在编写“Hello World!” 或类似的程序,您既不需要make
也不需要cmake
。如果您不需要支持多个编译器/平台,则不需要cmake
. 如果您正在开发一些庞大的库/应用程序,make
并且cmake
会帮助您更轻松地完成工作。
归档时间: |
|
查看次数: |
18302 次 |
最近记录: |