是否可以在执行时获取C程序中使用的#defines列表(编译时间和源代码中定义的)。 因为我的项目有很多C源文件。
是否有任何编译时选项可以获得它?
答案 0 :(得分:5)
GNU cpp
使用各种-d
选项输出宏并定义数据。有关详细信息,请参阅其手册页。
答案 1 :(得分:3)
对于gcc,您可以使用以下方法之一:
-dCHARS CHARS是一个或多个以下字符的序列,不得以空格开头。其他字符由编译器正确解释,或保留用于GCC的未来版本,因此会被忽略。如果指定行为冲突的字符,则结果未定义。
M'
Instead of the normal output, generate a list of
#define'指令用于执行预处理程序期间定义的所有宏,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件foo.h,那么命令
触摸foo.h; cpp -dM foo.h
将显示所有预定义的宏。
如果在没有-E选项的情况下使用-dM,则-dM将被解释为-fdump-rtl-mach的同义词。请参阅调试选项。
D'
Like
M'除了两个方面:它不包含预定义的宏,它输出#define' directives and the result of preprocessing. Both kinds of output go to the standard output file.
N'
像“D”一样,但只发出宏名称,而不是它们的扩展。
I'
Output
#include'指令以及预处理的结果。
U'
Like
D'除了仅输出扩展的宏或在预处理器指令中测试其定义的宏之外;输出被延迟,直到使用或测试宏;并且`#undef'指令也输出用于测试的宏,但当时未定义。
答案 2 :(得分:2)
在gcc中你可能想要的命令是
gcc -dM -E [your_source_files]
我知道这是在上面的答案中隐含的,但也许有人需要(像我一样)快速食谱。