有没有一种方法可以在输出二进制文件中存储clang编译时标志

Is there a way to store clang compile-time flags in the output binary?

本文关键字:二进制文件 输出 存储 clang 标志 编译 一种 方法 有没有      更新时间:2023-10-16

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

例如运行后:

clang -O3 -c main.c

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

gcc有-frecord-gcc-switches,但我找不到clang的等价物。

因为ecatmur已经在注释中暗示了。bug中记录的当前不支持此功能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}""

然后在你的C或C++程序中,你添加了一些类似的东西

const char clangArgs[] = CLANG_ARGS;

然后,当使用-V--version开关调用时,您可以使用调试器或类似的工具检索,甚至可以添加一些代码从程序中打印它。