Вместо -I
, используйте -isystem
, чтобы указать каталоги, которые вы не хотите sh выводить с -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
даже до того, как is a Make.Dep.
Наконец, предполагается, что $(PkgIncDirs)
hold package включает в себя каталоги, ни один из которых не должен изменяться, в то время как $(ProjIncDirs)
будет включать в себя каталоги внутри проекта, для которых вы хотите создать зависимости.
depend:
gcc -MM $(CFlags) $(Defines) $(patsubst -I%, -isystem %, $(PkgIncDirs)) $(ProjIncDirs) $(Source) >Make.Dep
-include Make.Dep