2012-08-15 16 views
0

我在我的makefile使用下面的命令:外殼的發現 - 控制文件路徑

LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp') 

結果有以下幾種形式:

someDirectory/Common/... 

我想結果不包括someDirectory/部分。

這可能嗎?

回答

5

%P說明符-printf將搜索目錄後打印路徑的一部分。

find ... -printf '%P\n' 
+0

當我嘗試這個時,我得到'find:-printf:unknown primary or operator' – 2012-08-15 07:18:19

+1

@Reinier:你在使用GNU find嗎? – 2012-08-15 07:19:15

+0

啊哈 - 我不知道有多個'find'。我使用的BSD查找顯然不支持'-printf' – 2012-08-15 07:29:01

0

如何管道到例如sed並刪除它?

喜歡的東西:

LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp' | sed '[email protected]/@@') 
0

,你可以管它的sed如果你的sed像這樣

$(shell find $(COMMON_PATH)/ -type f -name '*.cpp') | sed -e 's/.*\///g 

我認爲應該工作不能肯定我的語法是正確的,但我想是這樣。

0

-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)/字符串兩次,即使它在文件的路徑中出現兩次。

相關問題