我在这样的结构中有一组文件:
-src
-SubDir1
-file1.c
-file2.h
-file3.c
-SubDir2
-file1.c
-file2.c
-SubDir3
-file1.c
-file2.c
-outDir
我使用生成自定义输出文件 (.out) 的脚本从每个子目录编译文件。我创建了一个生成文件,当任何子目录中的任何 .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 $@