J'essaie d'ajuster un script de test bash qui construit automatiquement un paquet. La partie pertinente du script est:Option non valide transmise à GNU make though Bash array
# https://kojipkgs.fedoraproject.org//packages/cryptopp/5.6.3/8.fc27/data/logs/i686/build.log
# https://kojipkgs.fedoraproject.org//packages/cryptopp/5.6.3/8.fc27/data/logs/x86_64/build.log
if [[ ("$IS_X86" -ne "0") ]]; then
MARCH_OPT=(-m32 -march=i686)
else
MARCH_OPT=(-m64 -mtune=generic)
fi
FEDORA_FLAGS=(-DHAVE_CONFIG_H -I. -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
-fexceptions -fstack-protector-strong --param=ssp-buffer-size=4
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 "${MARCH_OPT[@]}" -fasynchronous-unwind-tables)
"$MAKE" distclean > /dev/null 2>&1
CXX="g++" "$MAKE" "${MAKEARGS[@]}" CXXFLAGS="${FEDORA_FLAGS[@]}" cryptest.exe 2>&1
Sa production une erreur:
Testing: Fedora standard build
make: invalid option -- 'g'
make: unrecognized option '--param=ssp-buffer-size=4'
make: invalid option -- 'c'
make: invalid option -- '='
make: invalid option -- '/'
make: invalid option -- 'u'
make: invalid option -- '/'
make: invalid option -- '6'
make: invalid option -- '4'
make: invalid option -- 'u'
make: invalid option -- '='
make: invalid option -- 'g'
make: invalid option -- 'c'
Usage: make [options] [target] ...
Options:
-b, -m Ignored for compatibility.
-B, --always-make Unconditionally make all targets.
-C DIRECTORY, --directory=DIRECTORY
Change to DIRECTORY before doing anything.
-d Print lots of debugging information.
--debug[=FLAGS] Print various types of debugging information.
-e, --environment-overrides
Environment variables override makefiles.
...
Je pense que le problème a quelque chose à voir avec le tableau Bash. Mais je suis assez sûr que les choses sont correctes à ce sujet. Les éléments sont entourés de parenthèses; et ses éléments sont référencés avec ${VAR[@]}
. J'ai également essayé de citer chaque valeur dans le tableau FEDORA_FLAGS
, mais il a produit la même erreur.
Qu'est-ce qui produit l'erreur et comment la réparer?
Merci Chepner. Le '' $ {FEDORA_FLAGS [*]} "' l'a corrigé. C'est le genre de chose qui prend le plaisir des scripts Bash. S'ils nous disent de faire quelque chose (comme utiliser la syntaxe '' $ {VAR [@]} "'), alors cela devrait fonctionner partout sans avoir besoin de se souvenir de règles spéciales. Dans mon cas, je ne connaissais même pas la règle ... – jww
Le problème est que le paramètre 'CXXFLAGS' est exactement le genre de chose qui ne fonctionne pas pour les paramètres arbitraires. L'utilisation d'un tableau ici ne vous aide en fait pas, car vous finissez par aplatir le tableau en une seule chaîne à transmettre en tant que valeur d'une variable régulière; vous ne passez pas les éléments du tableau en tant que mots séparés. Vous obtiendrez les * mêmes * résultats avec 'FEDORA_FLAGS =" - DHAVE_CONFIG_H -I. ... "' et 'CXXFLAGS =" $ FEDORA_FLAGS "'. – chepner
En d'autres termes: passer des arguments au compilateur en utilisant une seule variable 'CXXFLAGS' signifie que vous ne pouvez pas passer d'arguments contenant des espaces. – chepner