gpt4 book ai didi

c - 智能 Makefile : way scan directory tree and compile . c 文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:21 24 4
gpt4 key购买 nike

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

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

这个目录是从 Makefile 创建的:exec_phase2.test来源/构建

这是我的 Makefile 的一部分

# 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 文件及其依赖项?

注意:我不太习惯 makefile,我了解基础知识。

最佳答案

使用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

关于c - 智能 Makefile : way scan directory tree and compile . c 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com