Makefile,带子目录的模式规则仅适用于第一个依赖

Makefile, pattern rule with sub directory only work with the first dependence

这是我的问题

SOURCES_FUNCTIONS=cJSON.c parallelisationUtilities.c
$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c    
    $(CC) $(CFLAGS) -c $< -o $@ $(IFLAGS)

制作:*** Aucune règle pour fabriquer la cible «parallelisationUtilities.o »,必需倒入 «build/mainFunction »。阿拉特

通过在 SOURCES_FUNCTIONS 中将 parallelisationUtilities.c 放在 cJSON.c 之前,我得到与 cJSON.o 相同的错误。肯定没有丢失的文件..

++ 迈克尔

您没有显示足够的 makefile:您遗漏了最关键的部分,即目标文件将目标文件列为先决条件的部分。

我敢打赌你有这样的东西:

xxxx: $(BUILD_DIR)/$(SOURCES_FUNCTIONS:.c=.o)

这是错误的,因为它只将 $(BUILD_DIR) 添加到第一个文件。 $(SOURCES_FUNCTIONS:.c=.o) 的扩展给出:

xxxx: $(BUILD_DIR)/cJSON.o parallelisationUtilities.o

你需要使用这样的东西:

xxxx: $(patsubst %.c,$(BUILD_DIR)/%.o,$(SOURCES_FUNCTIONS))

以便 BUILD_DIR 为所有文件添加前缀。

$(BUILD_DIR)/$(EXEC_MAINFUNCTION): $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECTS_FUNCTIONS)) $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECTS_FUNCTIONS_NOT_TO_CLEAN)) $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECT_MAINFUNCTION))
    $(CC) $^ -o $@ $(LDFLAGS)

$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@ $(IFLAGS)

非常感谢疯子!