gpt4 book ai didi

bash - 在 bash 脚本中使用变量名进行编译

转载 作者:行者123 更新时间:2023-11-29 09:15:05 26 4
gpt4 key购买 nike

我正在尝试编写一个自动安装的 bash 脚本(我知道,我知道,我应该使用 make),它旨在通用:支持不同的编译器和构建标志.

例如,我有这些行:

$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 上

最佳答案

运行此命令时:

$FORTRAN_COMPILER $LINKERFLAGS lagrit_main.o lagrit_main.f

终端是这样解析的:

gfortran '-O -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o' lagrit_main.o lagrit_main.f

您可以看到链接器标志被解释为字符串,并作为字符串传递给 gfortran。这就是错误的根源。

解决方案是将链接器标志定义为一个数组,每个参数都是该数组中的一个元素:

LINKERFLAGS=(-O  -fcray-pointer -fdefault-integer-8 -m64 -Dlinx64 -c -o)
$FORTRAN_COMPILER ${LINKERFLAGS[*]} lagrit_main.o lagrit_main.f || exit 1

关于bash - 在 bash 脚本中使用变量名进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com