【问题标题】:Makefile rebuild the whole projectMakefile 重建整个项目
【发布时间】:2019-06-18 03:33:57
【问题描述】:

我有这个 Makefile ,每次我将 make 进入控制台时,它都会重建整个项目,我知道这是某种 .PHONY 错误,但我无法弄清楚。

这里是Makefile

all: start run

run: prog.o move prog

prog:   prog.o
        gcc object/prog.o -o exec/prog  


prog.o: src/prog.c src/prog.h
        gcc -c src/prog.c

move:
        mv *.o object

start:
        mkdir -p exec object

clean: 
        rm -rf object exec

.PHONY:  start clean move run

我知道有类似的主题,但我看不出我的错误在哪里。

【问题讨论】:

  • 先决条件默认情况下不按顺序运行。您可能希望在 Makefile 中避免使用 mv 以避免此类问题。

标签: makefile


【解决方案1】:

prog.oprog 在当前目录中都不存在(并且所有其他目标都是假的)。那么你期待什么?实际上,每次都必须重建所有目标。

PROG = exec/prog
OBJ = object/prog.o
SRC = src/prog.c src/prog.h

all: $(PROG)

$(PROG): $(OBJ) | exec
    gcc $^ -o $@

$(OBJ): $(SRC) | object
    gcc -c $< -o $@

exec object:
    mkdir -p $@

clean: 
    rm -rf exec object

.PHONY: all clean

【讨论】:

  • 该行没有空格时显示Makefile:8: *** missing separator. Stop.是否正常。
  • @Haskell-newb “缺少分隔符”通常是因为使用空格而不是制表符。
  • 是的,我知道我真的用标签重新制作了你的文件,但仍然得到同样的错误。
  • @Haskell-newb 检查您的编辑器设置等。它应该可以工作。
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多