如果我告诉C预处理器#include一个文件并使用CPPFLAGS来帮助找到所需的文件,那么该文件已包含在内,对吗?如果有的话,什么是使用CFLAGS告诉C编译器关于相同的include目录?C预处理器与C编译器
回答
我不认为有任何用处。
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
,这是一个不同的故事。
顺序虽然有所作为,但至少对于GNU的默认规则来说,CLFAGS被添加到CPPFLAGS之后,所以你不能用它来改变两个目录的相对顺序(注意,如果你依赖它,那你已经是在紧张的情况下)。 – AProgrammer 2010-05-03 09:12:25
谢谢你的帮助。我想我剩下的是C编译器用include路径本身所做的事情。现在说,编译器不**看到CPPFLAGS。在那种情况下,它是否会在不知道所需的包含路径的情况下进行排放为什么?就我所见,预处理器已经解决了路径并包含了所需的包含文件。 – Sunny209 2010-05-03 19:34:27
是的,但大部分时间,'cc'程序都会预处理*和*编译。没有单独的程序。 – Thomas 2010-05-03 20:19:20
- 1. C++“编译器”与预处理
- 2. C#编译器:预处理只有
- 3. C++预处理器
- 4. 编译器如何处理`(c = getchar())!= EOF`?
- 5. 预处理器错误C++
- 6. C++,预处理器语句
- 7. C预处理器宏
- 8. C++定义预处理器
- 9. C#预处理器指令
- 10. C++预处理器定义
- 11. C预处理器概念
- 12. C++预处理器变量
- 13. 调试C++预处理器
- 14. 舍入C预处理器
- 15. 推送C++预处理器
- 16. C代码预处理器
- 17. C预处理器Mac OS
- 18. C++预处理器__typeof
- 19. 预处理器基于C
- 20. C预处理器警卫?
- 21. C++ #define预处理器
- 22. 反编译Objective-C预处理器语句
- 23. Golang预处理器像C风格的编译开关
- 24. 使用C预处理器指令编译时间检查
- 25. C++模板和C预处理器
- 26. C预处理器:#define in C ...咨询
- 27. C,Objective-C的预处理器输出
- 28. OpenCL编译器预处理定义?
- 29. c中的翻译器和预处理器是否一样?
- 30. C++与2个编译器
@Duracell:不,那是'CXXFLAGS'。 'CPPFLAGS'用于C预处理器。 – Thomas 2010-05-03 06:53:40
@Thoams您所做的澄清很重要。对CPPFLAGS与CXXFLAGS有许多误导性提及。 – Barry 2012-05-23 18:13:22