简短而容易的问题,但我似乎在这里有一个作家:
假设我在与用于构建程序的makefile相同的目录中有一个源代码文件:
confus@confusion:~/prog$ ls
binaries includes main.c Makefile
如何将main.c
的{{1}}的二进制文件放入binaries
目录?然后在第二次运行make时,应该看看二进制文件是否是最新的(并且不要再次编译),就像正常一样。
我的想法是这样的:
# Makefile
.PHONY: all
SOURCES := $(wildcard *.c)
TARGETS := $(subst %.c,binaries/%.o,$(SOURCES))
all:$(TARGETS)
$(TARGETS):$(SOURCES)
./compile "$(subst .o,.c,$(@F))" -o "$@"
答案 0 :(得分:2)
不要说所有目标都依赖于所有来源,而是有一个模式规则
binaries/%.o: %.c
./compile ... -o $@ -c $<
您可能还需要使用vpath
<强>修:强> 您也遇到了问题...... 这个测试工作(只是为了编译单个.o文件,你仍然需要链接它们,这将是一个非常简单的规则)
# Makefile
.PHONY: all
SOURCES := $(wildcard *.c)
TARGETS := $(patsubst %.c,binaries/%.o,$(SOURCES))
all:$(TARGETS)
binaries/%.o: %.c
$(CC) -o $@ -c $<