是否可以从程序内部访问使用gcc编译器编译C/C++程序时使用的开关?
在我的应用程序中,作为日志信息的一部分,我希望写下程序使用的编译器开关,例如编译器输入的优化和预处理器变量。
没有任何标准的方法。
通常是构建系统会生成这样的东西,作为内置于应用程序中的版本字符串(但其中没有任何自动化)。
all_cflags
或all_lflags
。只有一些编译器开关的宏
http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
__OPTIMIZE__ 在所有优化编译中定义。如果编译器进行的是优化大小而不是速度,则定义 __OPTIMIZE_SIZE__。如果没有将函数内联到其调用者中(未进行优化或已通过 -fno-inline 明确禁用内联),则定义 __NO_INLINE__。如果需要完整的编译字符串,应修改构建/制作脚本以将字符串保存在特殊的 .h 文件中作为常量或定义。
另一种解决方案是使用一个 shell 脚本简单地包装 gcc 编译器调用,以将标志保存到头文件中。然后可以在源文件中包含头文件,例如:
#!/bin/sh
echo "#define GCC_OPTIONS \"$*\"" > gcc_options.h
exec gcc $@
如果以gcc_wrap -O0 main.c
的方式调用该脚本,将生成包含以下内容的头文件,并继续编译main.c。
#define GCC_OPTIONS "-O0 main.c"