我在这样的结构中有一组文件:
-src
-SubDir1
-file1.c
-file2.h
-file3.c
-SubDir2
-file1.c
-file2.c
-SubDir3
-file1.c
-file2.c
-outDir
我使用生成自定义输出文件(.out)的脚本来编译每个子目录中的文件。我创建了一个makefile,当任何.c文件在任何子目录中更改时,该文件都会为每个子目录生成.out文件。问题在于,这将编译所有子目录,因为我创建了一个规则,使.out文件依赖于所有.c文件。
是否存在一种聪明的方法来创建使每个.out文件仅依赖于每个子目录的文件的自定义规则? .out文件也应位于新目录中。在下面,您将找到我创建的Makefile
#Recursive wild card for all the subdirs
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
SRCS_DIR=src
SRCS_SUBDIRS= $(wildcard $(SRCS_DIR)/*/)
FILES := $(call rwildcard,$(SRCS_DIR)/,*)
#Get each subdir name
SUBDIRS_NAMES=$(subst $(SRCS_DIR)/,,$(SRCS_SUBDIRS))
#Output file has the name of each subdir with .out extension
OUTPUT_FILES=$(subst /,.out,$(SUBDIRS_NAMES))
Process_Outputs: $(OUTPUT_FILES)
CustomProcess $@
/outDir/$(OUTPUT_FILES):$(FILES)
myCustomScript $@
答案 0 :(得分:0)
这看起来像是static pattern rule的工作:
$(OUTPUT_FILES): %.out: src/%/file.c
myCustomScript $@