我想写一个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移出变量并进入最终呼叫行,问题是否解决? –