2016-11-08 93 views
1

我想用sed改變一個Makefile變量。我寫了一個小的Makefile來說明我正在嘗試做什麼。 CINCS變量最終將被附加到CFLAGS變量。 CSINCS變量應該保存所有包含文件的路徑,前面沒有「-I」。用sed改變Makefile變量

SHELL = /bin/sh 

SRCS = /usr/local/src/jpeg/jpeg-9b 
CINCS = -I/usr/local/src/jpeg/jpeg-9b 
CSINCS = $(CINCS) | sed -e "s/-I//g" 

check: 
@echo 1. $(SRCS) 
find $(SRCS) -name "*.c" -print > cscope.files 
@echo 2. $(CSINCS) 
find '$(CSINCS) -name" "*.h' -print >> cscope.files 
cscope -k -b 
cat cscope.files | xargs ctags -u 

我試圖在所有包含路徑的前面刪除 「-I」。在執行時:

$ make -f test check 
1. /usr/local/src/jpeg/jpeg-9b 
find /usr/local/src/jpeg/jpeg-9b -name "*.c" -print > cscope.files 
2. /usr/local/src/jpeg/jpeg-9b 
find '-I/usr/local/src/jpeg/jpeg-9b | sed -e "s/-I//g" -name" "*.h' -print >> cscope.files 
find: unknown predicate `-I/usr/local/src/jpeg/jpeg-9b | sed -e "s/-I//g" -name" "*.h' 
test:8: recipe for target 'check' failed 
make: *** [check] Error 1 

在位置「2」CSINCS變量看起來是正確的。但與「查找命令擴展這就是問題所在

我知道我可以用CINCS變量與cscope的命令:。

cscope -I $(CINCS) 

但我想使用的CTAGS cscope.files我可以生成一個單獨的CSINCS變量,並保持CINCS和CSINCS始終保持同步,只是對正在發生的事情感到好奇。

回答

2

您還沒有告訴make將CSINCS的值作爲shell腳本,你需要類似

CSINCS := $(shell echo $(CINCS) | sed -e "s/-I//g") 

或者,如果你有讓4.0或更近

CSINCS != echo $(CINCS) | sed -e "s/-I//g" 

雖然這東西簡單,你不需要使用SED或殼

CSINCS := $(subst -I,,$(CINCS)) 
+0

@rsun,歡迎SO,看[當有人回答我的問題時,我應該怎麼做?](https://stackoverflow.com/help/someone-answers) – Sundeep