Makefile 依赖被忽略

Makefile dependency being ignored

我创建了一个简单的 makefile 来理解它们工作原理背后的基本思想,但它没有按我预期的方式执行。请看以下内容:

test:  test.c
    gcc -o test test.c

我的理解是这应该只在 test.c 文件发生更改时运行。问题是无论是否有更改,它每次都会运行。

我注意到当我使用任意目标名称时会发生这种情况。如果我将目标名称设为实际文件名,例如 "test.exe",它可以正常工作,但我看到的所有教程都显示了使用任意目标名称的依赖项。知道为什么会这样吗?

在Windows下,Make自动为生成的程序添加后缀.exe

由于目标的名称与规则的结果不同,Make 尝试重新生成它。

你应该这样写你的 makefile:

EXE := test.exe

$(EXE): test.c
    gcc -o $@ $^

如果您需要可移植性并且不想重写规则,请使用:

EXE := test

if ($(OS),Windows_NT)
EXE := $(EXE).exe
endif

$(EXE): test.c
    gcc -o $@ $^