【问题标题】:Makefile, pattern rule with sub directory only work with the first dependenceMakefile,带有子目录的模式规则仅适用于第一个依赖项
【发布时间】:2017-07-31 15:56:54
【问题描述】:

这是我的问题

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

make: *** Aucune règle pour fabriquer la cible «parallelisationUtilities.o», nécessaire pour «build/mainFunction»。阿雷特

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

++ 迈克尔

【问题讨论】:

    标签: design-patterns makefile directory rule


    【解决方案1】:

    您没有展示足够多的 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 为所有文件添加前缀。

    【讨论】:

      【解决方案2】:
      $(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)
      

      非常感谢疯狂!

      【讨论】:

      • 简单得多,IMO,应该是 $(addprefix $(BUILD_DIR)/,$(OBJECTS_FUNCTIONS) $(OBJECTS_FUNCTIONS_NOT_TO_CLEAN) $(OBJECT_MAINFUNCTION))
      猜你喜欢
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多