有没有办法在输出二进制文件中存储clang编译时标志?

don*_*ner 13 c c++ gcc clang

有没有办法在使用clang时将编译时标志存储在输出二进制文件中?

例如在运行之后:

clang -O3 -c main.c

生成的main.o文件应该包含在某处-O3.

gcc有,-frecord-gcc-switches但我找不到铿锵的等价物.

Val*_*ity 4

正如 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开关调用时从程序中打印它。