2016-11-08 2 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変数が正しく表示されます。 。。しかし、そこに私はcscopeのコマンドでCINCS変数を使用することができます知っていることが問題だ

」を見つけるのコマンドを使用して拡張したものです:

cscope -I $(CINCS) 

が、私はctagsのためcscope.filesを使用したいです私はちょうど別のCSINCS変数を生成し、常に同期してCINCSとCSINCSを維持することができます。

答えて

2

CSINCSの値を実行するように指示していません。シェルスクリプトのようなものが必要です

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

それとも、この単純な何かのためにあなたがSO、見て歓迎し、SEDまたはシェル

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

@rsunを使用する必要はありませんが、あなたが4.0以上の最近の

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

を作る持っている場合[誰かが私の質問に答えるとどうすればいいですか?](https://stackoverflow.com/help/someone-answers) – Sundeep