以前我有一个指令pictDBM
这是这样的:多行bash脚本和make文件指令评估的bash变量的串联
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 [email protected] $^ $(LDLIBS)
这部分工作非常出色。
然后我想我能够添加从命令行给出的可选参数。然后这个选项会进入我在pictDBM
子部分执行的gcc
命令行。
我通过使用在我的代码中声明的OPTS=""
变量(在任何指令之前的makefile开始处)来解决该问题。我的目标是打电话给这样的: make all OPT='-g'
。
然后我宣布我的解决方案的变量base=gcc $(CFLAGS) -o [email protected] $^ $(LDLIBS)
一部分是使用if else结构包括或不是我选择的变量${OPT}
到${base}
gcc
命令,我在pictDBM执行。
我红this topic,即帮助建立我的多行if else结构:
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
你可以看到回声只打印-g,我怎么能解决这个问题?
我做你建议做什么我的make文件现在看起来像这样: 'CFLAGS + = -std = c99 -Wall'
'CFLAGS + = $$(pkg-config vips --cflags)'
'LDLIBS + = $$(pkg-config vips --libs)-lm -lssl -lcrypto'
'倍率CFLAGS + ='
'倍率LDFLAGS + ='
'所有:pictDBM'
'pictDBM:db_list.o db_delete.o db_utils.o error.o pictDBM.o db_create.o'
'去重的.o image_content.o pictDBM_tools.o db_read.o'
但是当我做'让所有CFLAGS = -g'
我得到: – Simonlbc
'CC -g -c -o pictDBM.o pictDBM.c 在文件包括从pictDB.h:32:0, from pictDBM.c:11: /usr/local/include/vips/vips.h:85:18:致命错误:glib.h:没有这样的文件或目录 编译终止。:目标'pictDBM.o'的配方失败 make:*** [pictDBM.o]错误1' 我错过了什么? –
Simonlbc
对不起,格式是可怕的。我试图做出最大的投入换行。但通过审判和失败它最终看起来像这样:( – Simonlbc