有没有办法在使用clang时将编译时标志存储在输出二进制文件中?
例如在运行之后:
clang -O3 -c main.c
生成的main.o文件应该包含在某处-O3.
gcc有,-frecord-gcc-switches但我找不到铿锵的等价物.
正如 ecatmur 已经在评论中暗示的那样。目前不支持此功能,如错误https://llvm.org/bugs/show_bug.cgi?id=16291中所述。
然而,作为该功能不可用时的解决方法,我建议您的构建过程使用 clang 的-D参数在程序中定义一个宏。例如,假设您从 bash 脚本调用它(调整到您使用的任何构建工具):
CLANG_ARGS='-O3 -c main.c'
clang $CLANG_ARGS -D CLANG_ARGS="\"${CLANG_ARGS}\""
Run Code Online (Sandbox Code Playgroud)
然后在您的 C 或 C++ 程序中添加以下内容:
const char clangArgs[] = CLANG_ARGS;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用调试器或类似的工具进行检索,甚至可以添加一些代码,以便在使用-V或--version开关调用时从程序中打印它。