私はインストールを自動化するbashスクリプトを書こうとしています(私は知っていますが、私はmake
を使用しています)、異なるコンパイラとビルドフラグをサポートしています。bashスクリプトで変数名を使ってコンパイルする
FORTRAN_COMPILER=gfortran
LINKERFLAGS="-O -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o"
BUILDFLAGS="-O -Dlinx64 -fcray-pointer -fdefault-integer-8 -fno-sign-zero -o"
BUILDLIBS="lagrit_main.o lagrit_fdate.o lagrit_ulin64_o_gcc.a $LAGRIT_UTIL_DIR/util_ulin64_o_gcc.a"
BUILDSUFFIX="-L$ACCESS -lexodus -lexoIIv2for -lnetcdf -lm -lstdc++"
MAKEFLAG="MOPT=64"
として設定された変数と
$FORTRAN_COMPILER $LINKERFLAGS lagrit_main.o lagrit_main.f
$FORTRAN_COMPILER $LINKERFLAGS lagrit_fdate.o lagrit_fdate.f
make $MAKEFLAG lib
$FORTRAN_COMPILER $BUILDFLAGS $LAGRIT_NAME $BUILDLIBS $BUILDSUFFIX
:
gfortran: error: lagrit_main.o: No such file or directory
gfortran: error: lagrit_fdate.o: No such file or directory
gfortran: error: lagrit: No such file or directory
gfortran: error: lagrit_main.o lagrit_fdate.o lagrit_ulin64_o_gcc.a /scratch/sft/livingston/build/shared/LaGriT/lg_util/src/util_ulin64_o_gcc.a: No such file or directory
しかし、私は同じことを実行
例えば、私はこれらの行を持っています長い形式のコマンド(つまり、gfortran -O -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o lagrit_main.o lagrit_main.f
)が問題なく構築されます。
私はここで何が欠けていますか?私は可変ラインの異なる順列を試しました。
gfortran $LINKERFLAGS lagrit_main.o lagrit_main.f
"$FORTRAN_COMPILER" "$LINKER_FLAGS" lagrit_main.o lagrit_main.f
${FORTRAN_COMPILER} ${LINKER_FLAGS} lagrit_main.o lagrit_main.f
これらはすべて同じエラーになります。
EDIT:明確にするために、このコマンドを実行すると、これはUbuntuの16.04
は、すべての変数が同じbashスクリプトで宣言されています:
ソリューションは、この配列の要素は、それぞれの引数を指定して、代わりに配列としてリンカのフラグを定義することですか?もしそうでなければ、あなたは '輸出VAR'を見逃しているかもしれません... –
彼らはそうです;実際、私は 'echo $ FORTRAN_COMPILER $ BUILDFLAGS $ LAGRIT_NAME $ BUILDLIBS $ BUILDSUFFIX"を(他の2行とともに)実行しました。出力は、ハードコードされた 'gfortran'コマンドが正確に一致しています。 –
-oを変数から最終コールラインに移動すると、問題は解決されますか? –