加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 20:54:51 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个自动安装的bash脚本(我知道,我应该使用make),它的目的是通用的:支持不同的编译器和构建标志. 例如,我有这些线: $FORTRAN_COMPILER $LINKERFLAGS lagrit_main.o lagrit_main.f$FORTRAN_COMPILER $LINKERFLAGS lagrit_fdate.o lagrit_fdat
我正在尝试编写一个自动安装的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读