代码之家  ›  专栏  ›  技术社区  ›  Isaac Woods

Makefile每次都会构建所有内容

  •  0
  • Isaac Woods  · 技术社区  · 7 年前

    BUILD_DIR=./build
    OBJS = \
      $(BUILD_DIR)/main.o \
      $(BUILD_DIR)/common.o \
      ...
    
    roo: $(OBJS)
        $(CXX) -o $@ $(OBJS) $(LFLAGS)
    
    .PHONY: $(BUILD_DIR)
    $(BUILD_DIR):
        mkdir -p $(BUILD_DIR)/passes
    
    $(BUILD_DIR)/%.o: src/%.cpp $(BUILD_DIR)
        $(CXX) -o $@ -c $< $(CFLAGS)
    

    然而,每次都会重新编译每个对象文件,即使我遵循规则直接使用 $@

    我认为这不是 this

    1 回复  |  直到 7 年前
        1
  •  1
  •   Norman Gray    7 年前

    你已经说过了 $(BUILD_DIR)/%.o 取决于 $(BUILD_DIR) ,但每次将文件添加到该目录时(例如,通过该规则本身),都会触摸该目录。也就是说, 总是 比目标更新。

    $(BUILD_DIR)/%.o: src/%.cpp
        mkdir -p $(BUILD_DIR)/passes
        $(CXX) -o $@ -c $< $(CFLAGS)