而不是-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
这是一个示例Makefile
实现gmake
。该patsubst
函数是一个模式替换,使用 % 作为匹配“之前”的部分,然后捕获并在“之后”中使用。 isystem
后面似乎需要一个空格,但这很容易生成,patsubst
因为百分号可以防止空格被截断。如果命名的文件不存在,则减号选项-include
告诉不要抱怨。gmake
这使您甚至可以在没有最后的情况下使用gmake
来制作depend
和生产 ,这假定包含不应更改的包包含目录,而将包含您希望为其生成依赖项的项目中的目录。Make.Dep
Make.Dep.
$(PkgIncDirs)
$(ProjIncDirs)
depend:
gcc -MM $(CFlags) $(Defines) $(patsubst -I%, -isystem %, $(PkgIncDirs)) $(ProjIncDirs) $(Source) >Make.Dep
-include Make.Dep