編譯C程序中隱含的生成規則是
%.o:%.c
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
其中$()
語法擴展變量。由於在編譯器調用中使用了CPPFLAGS
和CFLAGS
,您用它來定義包含路徑是個人品味的問題。例如,如果foo.c
是在當前目錄
make foo.o CPPFLAGS="-I/usr/include"
make foo.o CFLAGS="-I/usr/include"
文件都將打電話給你的編譯器以完全相同的方式,即
gcc -I/usr/include -c -o foo.o foo.c
兩者之間的區別進場時,你有多種語言這就需要同包括路徑,例如,如果你有bar.cpp
然後嘗試
make bar.o CPPFLAGS="-I/usr/include"
make bar.o CFLAGS="-I/usr/include"
那麼編譯會
g++ -I/usr/include -c -o bar.o bar.cpp
g++ -c -o bar.o bar.cpp
由於C++隱式規則也使用CPPFLAGS
變量。
這種差異給你要使用一個很好的指南 - 如果你想的標誌被用於所有的語言把它放在CPPFLAGS
,如果它是一個特定的語言把它放在CFLAGS
,CXXFLAGS
等後者的例子鍵入包括標準符合性或警告標誌 - 您不希望將-std=c99
傳遞給C++編譯器!
你可能再像這樣的東西最終會在你的makefile
CPPFLAGS=-I/usr/include
CFLAGS=-std=c99
CXXFLAGS=-Weffc++
可能重複http://stackoverflow.com/questions/495598/difference-between-cppflags-and-cxxflags-in-gnu -make – 2010-05-02 21:03:41