从header-include信息构建c ++

时间:2014-08-13 07:20:52

标签: c++ build

使用Haskell我可以" ghc - 制作Main.hs"和阿达一起,我可以" gnatmake Main.adb"就是这样。

对于C ++,是不是有类似的东西?为什么不呢?

我不想为C ++项目编写buildscripts或makefile。我那里有那些该死的#include线。为什么这些信息不够?

注意:我依稀记得像Clang一样提到过的一个特征。


更新

似乎可以使用C ++编译器(或编写包装器脚本),以递归方式查找包含的头文件,并期望源文件或目标文件位于同一个目录中;自动编译和链接所有内容。如果源文件和目标文件具有相同的时间戳,则跳过。链接时决策是一种特殊情况,需要编译器标志/开关从单个标头的多个源/目标文件中选择一个,或指定动态链接。例如:awesomecompiler Main.cpp --link-choice=DrawStuff.h-->DrawStuffGL.o

因此,使用品牌或其替代品必须有另一个原因。它是什么?

按照马丁的建议重新解释这个问题: 为什么我们不能从头文件中获取所有构建信息,以及针对特殊情况的一些命令行标记?

1 个答案:

答案 0 :(得分:0)

某些语言有一个系统,其中“主”文件将组成该程序的所有其他内容指定为“模块”或其他类似文件。 Ada当然可以,我不知道Haskell在那里发表评论。

C和C ++依赖于单独编译并在最后链接的模块,软件开发人员确切地决定了这里的流程。这有一些优点,例如您可以为一个解决方案构建模块,为另一个解决方案构建不同的模块。如果所有模块都由源文件指定,那么这是不可能的(然后你必须使文件在文件系统中显示/消失,这当然意味着其他一些“在编译器之外工作”,所以你最终得到一个makefile或者一些这样的事情)。

比如说,我们制作一个游戏,然后我们封装了所有的绘图,然后我们可以通过简单地链接相关的“DrawStuffDX9.o”或“DrawStuffGL.o”来选择我们是使用DirectX9,DirectX10,OpenGL还是OpenGLES。等。

与往常一样,自由意味着更多的选择,但也需要更多的工作。就像购买现成的家具一样简单,但如果你想让它完全适合你的房子,从地板到天花板,你必须要幸运。定制的家具将花费更多,需要一些详细的测量,但将非常适合您的家。

[gcc -MM somefile(s)将为您指定的源文件提供基本的makefile。