[我正在开始一个新项目,并考虑使用gcc 6.3.1 -MM
将依赖项生成到名为Make.Dep
的文件中,该文件将包含在Makefile
中。
-M
选项输出all标头,包括系统标头。 -MM
选项不会输出系统标头,但是我仍然被字面上数以千计的供应商和程序包标头埋藏,例如Sybase和Boost,我认为它们不会改变(如果这样做,我很乐意必须手动进行完全重建)。
显然,我可以将gcc -MM包装在perl脚本中,或者您知道我认为要打包的目录是什么,但是有没有更广泛接受的解决方案?
请注意,我的供应商标题之一是寻找特定的gcc定义的预处理器符号来配置其可移植性。我宁愿不手动设计一组此类符号,以允许使用某些非gcc方法(例如makedepend
)来生成依赖项。
代替-I
,使用-isystem
声明您不希望通过-MM
输出的目录。
https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html似乎与-M
和-MM
选项紧密相关,但目前尚未提及。
示例:这将创建foo.cpp和bar.cpp的正确依赖性,包括 Sybase标头:
gcc -MM -I/opt/nmr/sap/sybaseASE/sybclient-16.0.3-7/OCS-16_0/include foo.cpp bar.cpp
示例:这样做相同,但是不包括 Sybase标头:
gcc -MM -isystem /opt/nmr/sap/sybaseASE/sybclient-16.0.3-7/OCS-16_0/include foo.cpp bar.cpp