0
パッケージを自動的にビルドするbashテストスクリプトをチューニングしようとしています。スクリプトの該当する部分は次のとおりです。エラーを生成無効なオプションがGNUに渡されました。Bashの配列
# 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
その:
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.
...
私はこの問題は、Bashの配列とは何かを持っていると思います。しかし、私は物事が正しいと確信しています。要素は括弧で囲まれています。その要素は${VAR[@]}
で参照されています。私もFEDORA_FLAGS
配列の各値を引用してみましたが、同じエラーが発生しました。
何がエラーを引き起こしていますか?どのように修正しますか?
おかげChepnerの
を得ています。 '$ {FEDORA_FLAGS [*]} ''はそれを修正しました。これは、Bashスクリプティングの楽しさを取り除くものです。彼らが($ {VAR [@]} "構文を使うような)何かをするように指示すれば、特別な規則を覚える必要はありません。私の場合、私はルールについて知りませんでした... – jww
問題は、 'CXXFLAGS'パラメータが、まったく任意のパラメータに対して機能しないものであるということです。最終的には配列を単一の文字列に平坦化して通常の変数の値として渡すので、ここでは配列を使用することは実際には役に立ちません。配列の要素を別々の単語として渡すことはありません。 'FEDORA_FLAGS =" - DHAVE_CONFIG_H - I ... ... "と' CXXFLAGS = "$ FEDORA_FLAGS" 'を使って、* exact *と同じ結果が得られます。 – chepner
別の言い方をすれば、単一の変数 'CXXFLAGS'を使って引数をコンパイラに渡すことは、空白を含む引数を渡すことができないことを意味します。 – chepner