如何判断CFLAGS的gcc/autotools选项是否也在LDFLAGS中?
问题描述:
我有一些-f
CFLAGS
编译器选项,如-fsanitize=address
和前段时间有人向我建议,我也把这些选项放在LDFLAGS
,所以我做了。它没有造成任何问题。如何判断CFLAGS的gcc/autotools选项是否也在LDFLAGS中?
我的问题是我怎么能告诉CFLAGS
哪些编译器选项也应该在LDFLAGS
?它只是-f
前缀选项?由于
答
我有喜欢-fsanitize =地址和 有人CFLAGS一些-f编译器选项前一阵子向我建议,我也把这些选项在LDFLAGS 所以我做到了。它没有造成任何问题。
不仅不会造成任何问题,而且这是建立消毒程序的唯一正确方法。
我的问题是我怎么能告诉从CFLAGS 哪些编译器选项也应该在LDFLAGS?它只是-f前缀选项?
,如果你只是做
LDFLAGS = $(CFLAGS) $(LIBS)
编译器驱动程序(/usr/bin/gcc
)它不会伤害知道哪一个高级别选项是链接等等不必要的选项将被简单地过滤掉。如果你想知道这是如何发生,与-dumpspecs
标志运行gcc:
$ gcc -dumpspecs
...
*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S: %(linker) %{!fno-use-linker-plugin:%{!fno-lto: -plugin %(linker_plugin_file) -plugin-opt=%(lto_wrapper) -plugin-opt=-fresolution=%u.res %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}} }}%{flto|flto=*:%<fcompare-debug*} %{flto} %{fno-lto} %{flto=*} %l %{no-pie:} %{pie:-pie} ...
这看起来有点丑,但在现实中,这只是一个小型的语言标志的翻译。语法详细信息给出here(虽然我严重怀疑你需要知道他们)。