如何将二进制文件放在不同的位置?

时间:2011-08-01 13:36:20

标签: directory makefile gnu-make

简短而容易的问题,但我似乎在这里有一个作家:

假设我在与用于构建程序的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 "$@"

1 个答案:

答案 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 $<