我一直在阅读make
并查看热门C
projects on GitHub的Makefile,以巩固我的理解。
我正在努力理解的一件事是为什么我所看到的所有示例(例如lz4,linux和FFmpeg)似乎都在考虑头文件依赖性。< / p>
对于我自己的项目,我有包含以下内容的头文件:
因此,在确定是否重新编译时,必须考虑对这些进行任何更改。
我发现gcc
可以像this SO answer那样自动生成依赖关系中的Makefile片段,但我没有看到在我看过的任何项目中都使用过它。
你能帮助我理解为什么这些项目显然会忽略头文件依赖吗?
答案 0 :(得分:3)
我会尝试回答。
某些项目的源发行版包括一个configure
脚本,该脚本从模板/其他内容创建一个makefile。
因此需要为他/她的目标重新编译包的最终用户必须这样做:
$ configure --try-options-until-it-works
$ make
在configure
阶段出现问题,但这与makefile本身无关。用户必须下载内容,调整路径或配置交换机并再次运行,直到成功生成makefile。
但是一旦生成了makefile,那么应该从那里开始非常流畅的用户只需要构建一次产品就可以使用它。
一部分用户需要更改一些源代码。在这种情况下,他们必须清理所有内容,因为提供的makefile不是实际开发人员管理其构建的方式。他们可能会使用其他系统(code :: blocks,Ant,gprbuild ......),只需提供makefile即可从头开始自动化生产,避免依赖复杂的生产系统。即使在Windows / MinGW上,make
也是相当标准的。
请注意,有些文件系统提供了构建审核(Clearcase),其中依赖项是自动管理的(clearmake
)。
如果您将makefile视为批处理脚本来构建所有源代码,则无需使用
来添加依赖关系系统gcc -MM
命令,用于附加依赖项(需要时间)请注意,您可以通过一些额外的工作自己构建它(向您的makefile添加depend
目标)