我面临的目录结构是:
./xxx/src
./xxx/src/folder1
./xxx/src/folder2
./xxx/src/folder2/subfolder1
./xxx/UTest
./xxx/Module
./xxx/Itfs
./.hg
./Tools
不是让每个模块定义它自己的包含搜索目录。我想使用“简单” shell命令找到所有相关目录,并在我的顶层makefile中使用它。
这看起来好多了,而且作为奖励,它迫使其他用户使用编码准则中定义的文件夹。
我到了:
MODINCLUDES = \
$(shell find $(MODULE_DIR) \( -name .hg -o -name Tools \) -prune -o \( -name src -o -name Module -o -name Itfs \) -type d -print| while read line; do echo "-I$$line"; done )
但这会导致
MODINCLUDES = -I/xxx/src -I/xxx/Module -I/xxx/Itfs
很显然,我也希望在src
中包含所有子文件夹。
./xxx/src/folder1
./xxx/src/folder2
./xxx/src/folder2/subfolder1
有人可以向我解释如何执行此操作吗?
谢谢!
答案 0 :(得分:0)
如果我正确理解了您的问题,请不要仅局限于三个特定的文件夹。取出
\( -name src -o -name Module -o -name Itfs \)
如果您的while
支持find
,也许可以避免愚蠢的-printf
循环:
MODINCLUDES = \
$(shell find $(MODULE_DIR) \
\( -name .hg -o -name Tools \) -prune -o \
-type d -printf "-I%p\n")
答案 1 :(得分:0)
使用find
查找所需的子目录可以通过以下方式完成:
find $(MODULE_DIR)/xxx/src $(MODULE_DIR)/xxx/Module $(MODULE_DIR)/xxx/Itfs -type d
然后,将其放入Makefile中并添加-I
前缀:
ROOTDIRS := $(addprefix $(MODULE_DIR)/xxx/,src Module Itfs)
SUBDIRS := $(shell find $(ROOTDIRS) -type d)
MODINCLUDES := $(addprefix -I,$(SUBDIRS))
或者一次全部:
MODINCLUDES := $(addprefix -I,$(shell find $(addprefix $(MODULE_DIR)/xxx/,src Module Itfs) -type d))