Как я могу заставить make поместить бинарные файлы в другое место? - PullRequest
1 голос
/ 01 августа 2011

Короткий и простой вопрос, но у меня, кажется, здесь есть блок писателя:

Предположим, у меня есть файл исходного кода в том же каталоге, что и make-файл, который я использую для сборки программы:

confus@confusion:~/prog$ ls
binaries  includes  main.c  Makefile

Как мне заставить make положить файлы для моего main.c в binaries dir? После этого при втором запуске make должен увидеть, обновлен ли бинарный файл (и не компилировать его снова), как обычно.

Моя мысль была примерно такой:

# Makefile
.PHONY: all

SOURCES := $(wildcard *.c)
TARGETS := $(subst %.c,binaries/%.o,$(SOURCES))

all:$(TARGETS)

$(TARGETS):$(SOURCES)
    ./compile "$(subst .o,.c,$(@F))" -o "$@"

1 Ответ

2 голосов
/ 01 августа 2011

Не говорите, что все цели зависят от всех источников, вместо этого используйте шаблонное правило

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 $<
...