多行bash脚本和make file指令中评估bash变量的串联

西蒙贝克

以前我有一条pictDBM类似这样的指令

    all: pictDBM

    pictDBM : db_list.o db_delete.o db_utils.o error.o pictDBM.o 
          db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o
                      gcc $(CFLAGS) -o $@ $^ $(LDLIBS)

这部分效果很好。

然后,我想我希望能够添加命令行中给定的可选参数。然后,此选项将进入gcc我在pictDBM子部分中执行命令行

我通过使用OPTS=""在代码中声明变量(在makefile的开头(在任何指令之前))解决了该问题我的目标是这样叫make :make all OPT='-g'

然后我声明了一个变量 base=gcc $(CFLAGS) -o $@ $^ $(LDLIBS)

我的解决方案的一部分是使用if else构造在我在pictDBM中执行${OPT}${base} gcc命令中包含或不包含我的选项变量

修改了这个主题,这有助于构建我的多行代码(如果不是):

pictDBM : db_list.o db_delete.o db_utils.o error.o pictDBM.o 
    db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o
        if [ ! -z "$$OPT" ];    \
        then    \
                echo "$$base $$OPT" ; \ #for debugging purposes
                eval "$$base $$OPT"  ;   \
        else    \
                eval "$$base" ;  \
        fi ;

当我简单执行时make all,make似乎一切正常,并且输出程序运行良好。

但是当我执行时,make all OPTS='-g'我得到以下输出:

 -g
/bin/sh: 1: eval: -g: not found
makefile:16: recipe for target 'pictDBM' failed
make: *** [pictDBM] Error 127

您只能看到-e打印回波,如何解决此问题?

用户名

您不需要条件或eval,只需CFLAGS直接在命令行上指定即可:

make all CFLAGS=-g

并覆盖makefile中的变量:

override CFLAGS += # Your local options

all: pictDBM

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o \
          db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o
    gcc $(CFLAGS) -o $@ $^ $(LDLIBS)

CFLAGS 但是,在这里有点奇怪,您不应在链接期间传递编译标志。

链接选项可以用LDFLAGS;指定因为pictDBMpictDBM.o一个前提,你已经在使用LDLIBS正确的话,你可以依靠化妆的隐性关联规则,没有处方需要。

override LDFLAGS += # Your local options

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o \
          db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o

重新发表您的评论,您需要override在变量的第一个定义上进行指定,否则它将无法正常工作:

override CFLAGS += $(shell pkg-config vips --cflags) -std=c99 -Wall
override LDLIBS += $(shell pkg-config vips --libs) -lm -lssl -lcrypto

pictDBM: db_list.o db_delete.o db_utils.o error.o pictDBM.o db_create.o dedup.o image_content.o pictDBM_tools.o db_read.o

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

POSIX和Bash脚本

来自分类Dev

如何在Bash脚本中读取多行输入?

来自分类Dev

如何停止在BASH脚本中串联命令替换的多行输出?

来自分类Dev

使用bash脚本在文件中添加多行

来自分类Dev

在Bash脚本中传递变量名称和值

来自分类Dev

如何评估变量bash脚本中的变量?

来自分类Dev

在bash脚本中接受多行输入

来自分类Dev

bash脚本中的grep和mysql变量

来自分类Dev

在bash脚本中使用sed替换多行

来自分类Dev

Linux Bash脚本,单个命令但多行?

来自分类Dev

Bash脚本中嵌入了指令?

来自分类Dev

Bash脚本和stdin

来自分类Dev

Bash脚本和流程

来自分类Dev

如何在Bash脚本中读取多行输入?

来自分类Dev

bash:将模式存储在变量中而不评估模式

来自分类Dev

具有多行和Grep的Bash脚本

来自分类Dev

评估BASH中变量的功能

来自分类Dev

如何评估bash脚本中涉及数学的串联字符串

来自分类Dev

bash +通过bash脚本从文件中读取变量和值

来自分类Dev

Bash从多行JSON脚本grep变量?

来自分类Dev

Sudo和Bash脚本

来自分类Dev

如何在bash脚本中的SSH内部执行多行代码

来自分类Dev

bash中的命令串联

来自分类Dev

如何在bash中包含和/或评估变量?

来自分类Dev

bash变量评估中的命令替换

来自分类Dev

Bash 变量在复合评估中不起作用

来自分类Dev

延迟评估 bash 变量

来自分类Dev

Bash 脚本和定义变量

来自分类Dev

使用 `{` 和 `}` 语法的 Bash 多行