0

我在我的 makefile 中使用以下命令:

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

结果为以下形式:

someDirectory/Common/...

我希望结果不包括该someDirectory/部分。

那可能吗?

4

4 回答 4

5

说明%P符 to将在搜索目录之后-printf打印路径名的一部分。

find ... -printf '%P\n'
于 2012-08-15T07:04:16.147 回答
0

管道到例如sed并让它移除它怎么样?

就像是:

LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp' | sed 's@someDirectory/@@')
于 2012-08-15T07:02:06.173 回答
0

如果您像这样使用 sed,您可以将其通过管道传输到 sed

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

我认为这应该可以不确定我的语法是否正确,但我认为是这样。

于 2012-08-15T07:08:06.973 回答
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)/字符串在文件路径中出现两次这种不太可能发生的情况,这将删除字符串两次。

于 2012-08-15T07:12:34.967 回答