0

我在这样的结构中有一组文件:

-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 $@
4

1 回答 1

0

这看起来像是静态模式规则的工作:

$(OUTPUT_FILES): %.out: src/%/file.c
    myCustomScript $@
于 2020-10-09T13:37:01.713 回答