我在我的 makefile 中使用以下命令:
LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp')
结果为以下形式:
someDirectory/Common/...
我希望结果不包括该someDirectory/
部分。
那可能吗?
说明%P
符 to将在搜索目录之后-printf
打印路径名的一部分。
find ... -printf '%P\n'
管道到例如sed
并让它移除它怎么样?
就像是:
LOCAL_FILES = $(shell find $(COMMON_PATH)/ -type f -name '*.cpp' | sed 's@someDirectory/@@')
如果您像这样使用 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)/
字符串在文件路径中出现两次这种不太可能发生的情况,这将删除字符串两次。