J'ai quelques options du compilateur -f dans CFLAGS comme -fsanitize = adresse et quelqu'un m'a suggéré il y a un moment que je aussi mettre ces options LDFLAGS donc je l'ai fait. Cela n'a causé aucun problème.
Non seulement cela ne causera pas de problèmes, mais c'est la seule façon correcte de construire un programme désinfecté.
Ma question est comment puis-je savoir quelles options de compilateur de CFLAGS devraient également aller dans LDFLAGS? Est-ce juste les options préfixées -f?
Il ne fera pas mal si vous faites simplement
LDFLAGS = $(CFLAGS) $(LIBS)
pilote du compilateur (/usr/bin/gcc
) connaît les options de haut niveau sont pour l'éditeur de liens, donc les options inutiles seront simplement filtrés. Si vous demandez comment cela se produit, exécutez gcc avec -dumpspecs
drapeau:
$ 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} ...
Cela ressemble un peu laid, mais en réalité, c'est juste une mini-langue pour la traduction de drapeau. Les détails de la syntaxe sont donnés here (bien que je doute sérieusement que vous avez besoin de savoir à leur sujet).