是否可以扩展以“-f”开头的 GCC/Clang 编译和 link 选项?

Is it possible to expand GCC/Clang compile and link options that start with "-f"?

我用GCC/Clang编写C/C++,但对以“-f”开头的编译器选项知之甚少。

例如,要打开 Address Sanitizer,我将“-fno-omit-frame-pointer -fsanitize=address”传递给编译器。这应该会影响编译和 link 阶段。

另一个例子,为了打开 OpenMP,我将“-fopenmp”传递给编译器,它支持编译和 link 共享 openmp 库。

如果我使用静态 openmp 库,我应该将“-fopenmp”传递给编译器,并将“-fopenmp -static”传递给 linker。 this Whosebug answer 表示它的意思是“-lgomp -lrt”。

我的问题:有没有什么方法可以扩展“-f”开始compile/options,这样我就可以知道这个“-f”标志links到底是什么库?

我不这么认为 - 这不是标准化的 - 你引用的两个例子是 gcc 的相当大的扩展,它们以自己的方式做事。

但是您可以使用 ldd 检查最终的可执行文件 - 您将看到链接的库。

让我们检查 https://clang.llvm.org/docs/ClangCommandLineReference.html --verbose-v 的 clang 文档看起来很有前途。 quick check at compiler-explorer.com 给出了有希望的结果。

GCC 有一个包含所有选项的类似页面:https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html 这里我们也有 -v,尽管它向 stderr 打印内容,但我无法在 compiler-explorer 验证输出。