我在我的makefile使用下面的命令:外殼的發現 - 控制文件路徑
LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp')
結果有以下幾種形式:
someDirectory/Common/...
我想結果不包括someDirectory/
部分。
這可能嗎?
我在我的makefile使用下面的命令:外殼的發現 - 控制文件路徑
LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp')
結果有以下幾種形式:
someDirectory/Common/...
我想結果不包括someDirectory/
部分。
這可能嗎?
的%P
說明符-printf
將搜索目錄後打印路徑的一部分。
find ... -printf '%P\n'
如何管道到例如sed
並刪除它?
喜歡的東西:
LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp' | sed '[email protected]/@@')
,你可以管它的sed如果你的sed像這樣
$(shell find $(COMMON_PATH)/ -type f -name '*.cpp') | sed -e 's/.*\///g
我認爲應該工作不能肯定我的語法是正確的,但我想是這樣。
該-printf '%P\n'
解決方案是優雅的。如果你不使用GNU find
雖然那麼你可以通過使用$(subst from,to,text)
make
功能,可以解決你的問題:
LOCAL_FILES = $(subst $(COMMON_PATH)/,,$(shell find $(COMMON_PATH) -type f -name '*.cpp'))
這一個空字符串替換的$(COMMON_PATH)/
任何發生。請注意,這將刪除$(COMMON_PATH)/
字符串兩次,即使它在文件的路徑中出現兩次。
當我嘗試這個時,我得到'find:-printf:unknown primary or operator' – 2012-08-15 07:18:19
@Reinier:你在使用GNU find嗎? – 2012-08-15 07:19:15
啊哈 - 我不知道有多個'find'。我使用的BSD查找顯然不支持'-printf' – 2012-08-15 07:29:01