我创建了一个简单的makefile来理解它们如何工作的基本思想,并且它没有按照我的预期执行。请参阅以下内容:
test: test.c
gcc -o test test.c
我的理解是这应该仅在test.c文件发生更改时运行。问题是它每次都会运行,无论是否有变化。
我注意到当我使用任意目标名称时会发生这种情况。如果我将目标名称设为实际文件名,例如“test.exe”,它可以正常工作,但我看到的所有教程都显示依赖项与任意目标名称一起使用。知道为什么会这样吗?
答案 0 :(得分:1)
在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 $@ $^