智能制作文件:扫描目录树并编译.c文件



我正在做一个增长非常快的项目,但我的Makefile对文件名有很强的依赖性。

我的目录树:生成文件源源/阶段2来源/包含

此目录是从生成文件创建的:exec_phase2.测试源代码/构建

这是我的制作文件的一部分

# Project path
PH2 = source
SRC_PH2 = $(PH2)/phase2
INCL_PH2 = $(PH2)/include
EXEC_PH2 = exec_phase2.test
BUILD_PH2 = $(PH2)/build
# Header file path
HEAD_PH2 = $(INCL_PH2)/const.h $(INCL_PH2)/listx.h $(INCL_PH2)/mikabooq.h
# Object files path
OBJECTS_PH2 = $(BUILD_PH2)/main.o $(BUILD_PH2)/mikabooq.o $(BUILD_PH2)/testP.o

all: mikaboo
mikaboo: phase2.test
phase2.test: clean buildOutDir coreFile
buildOutDir: 
    mkdir -p $(BUILD_PH2)
    mkdir -p $(EXEC_PH2)
coreFile: $(EXEC_PH2)/main.elf
    $(ELF) $(ELFFLAG) $<
$(EXEC_PH2)/main.elf: $(OBJECTS_PH2)
    $(LD) $(LDFLAG) $(LINKER_UARM_PH2)
$(BUILD_PH2)/main.o: $(SRC_PH2)/main.c $(BUILD_PH2)/mikabooq.o $(HEAD_PH2)
    $(CC) $(CCFLAGS) $@ $<
$(BUILD_PH2)/mikabooq.o: $(SRC_PH2)/mikabooq.c $(HEAD_PH2)
    $(CC) $(CCFLAGS) $@ $<
$(BUILD_PH2)/testP.o: $(SRC_PH2)/testP.c $(HEAD_PH2) $(HEAD_KER)
    $(CC) $(CCFLAGS) $@ $<
clean:
    rm -rf $(BUILD_PH2) $(EXEC_PH2) 

我想自动搜索源和头文件:我看到这两个命令:

#search all source file name
SOURCES := $(shell find $(SOURCEDIR) -name '*.c')
# Make list of object files with paths
OBJECTS := $(addprefix $(BUILDDIR)/,$(SOURCES:%.c=%.o))

好的,我认为这可以工作,但是现在我如何自动编译所有.c文件及其依赖项?

注意:我不习惯制作文件,我知道基础知识。

使用 foreach 生成一堆规则。 下面的CCompilation实现了foreach$(SOURCES)中提到的每个目录上使用的模板配方。请注意,配方中的最后一个自由行是一个重要的分隔符。

$(foreach DIRECTORY, $(dir $(SOURCES)), 
          $(call CCompilation, OUTPUT_DIRECTORY, EXTRA_STUFF, $(DIRECTORY)))
define CCompilation 
$(1)/%.o: $(3)/%.c
    CC $< $(2) -o $$@
endef 

最新更新