2010-05-03 158 views
3

如果我告訴C預處理器#include一個文件並使用CPPFLAGS來幫助找到所需的文件,那麼該文件已包含在內,對嗎?如果有的話,什麼是使用CFLAGS告訴C編譯器關於相同的include目錄?C預處理器與C編譯器

+3

@Duracell:不,那是'CXXFLAGS'。 'CPPFLAGS'用於C預處理器。 – Thomas 2010-05-03 06:53:40

+0

@Thoams您所做的澄清很重要。對CPPFLAGS與CXXFLAGS有許多誤導性提及。 – Barry 2012-05-23 18:13:22

回答

2

我不認爲有任何用處。

implicit make rules表示CFLAGS僅在編譯C程序(從.c到.o)時使用。編譯器命令行中還添加了值CPPFLAGS

CPPFLAGS也用於以下規則:

  • 編譯的C++程序
  • 編譯Fortran和RATFOR方案
  • 預處理Fortran和RATFOR方案
  • 組裝和預處理彙編程序
  • 製作來自C,Yacc或Lex程序的Lint Libraries

由於CPPFLAGS在使用CFLAGS每一種情況下被使用,似乎沒有任何意義添加-I指令來CFLAGS那些已經在CPPFLAGS

當然,如果你的Makefile有自定義規則,通過CFLAGS到編譯器,但是省略CPPFLAGS,這是一個不同的故事。

+1

順序雖然有所作爲,但至少對於GNU的默認規則來說,CLFAGS被添加到CPPFLAGS之後,所以你不能用它來改變兩個目錄的相對順序(注意,如果你依賴它,那你已經是在緊張的情況下)。 – AProgrammer 2010-05-03 09:12:25

+0

謝謝你的幫助。我想我剩下的是C編譯器用include路徑本身所做的事情。現在說,編譯器不**看到CPPFLAGS。在那種情況下,它是否會在不知道所需的包含路徑的情況下進行排放爲什麼?就我所見,預處理器已經解決了路徑幷包含了所需的包含文件。 – Sunny209 2010-05-03 19:34:27

+0

是的,但大部分時間,'cc'程序都會預處理*和*編譯。沒有單獨的程序。 – Thomas 2010-05-03 20:19:20