我想寫一個bash腳本來自動安裝(我知道,我知道,我應該使用make
),它的目的是通用的:支持不同的編譯器和編譯標誌。在bash腳本中使用變量名編譯
舉例來說,我有這些行:
$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
設置爲
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"
的變量,將返回這些錯誤:
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
這些都導致相同的錯誤。
編輯:爲了澄清,這是在Ubuntu 16.04
在同一個bash腳本聲明的所有變量?如果沒有,你可能會錯過'export VAR' ... –
他們是;實際上,我已經完成了一個'echo'$ FORTRAN_COMPILER $ BUILDFLAGS $ LAGRIT_NAME $ BUILDLIBS $ BUILDSUFFIX「(以及其他兩行),輸出與硬編碼的'gfortran'命令完全匹配。 –
如果將-o移出變量並進入最終呼叫行,問題是否解決? –