只有一个源更改时,Makefile会重建所有对象

时间:2016-02-16 19:22:33

标签: c makefile

我使用Makefile编译一个C项目,它按预期的方式工作:当我在一个源文件中更改一件事时,整个事情都会重建。我很确定问题就在那里:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    @echo -n 'Compiling $@ ... '
    $(CC) $(CFLAGS) -c $(patsubst obj/%.o, src/%.c, $@) -o $@

但是,我明确指定了一个文件作为依赖项,即当前正在构建的文件。这怎么会成为问题? 感谢。

2 个答案:

答案 0 :(得分:0)

关于make文件中的此代码:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    @echo -n 'Compiling $@ ... '
    $(CC) $(CFLAGS) -c $(patsubst obj/%.o, src/%.c, $@) -o $@

这将创建所有* .o文件

你真正想要的是:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    @echo -n 'Compiling $@ ... '
    $(CC) $(CFLAGS) -c $< -o $@

答案 1 :(得分:0)

好吧我解决了这个,这是一个愚蠢的。

SRC_DIR被定义为:

SRC_DIR = src 

最后有一个空格......将其移除,立即工作。我的坏......