2016-11-08 112 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