2010-05-03 131 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