以前我有一個指令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