Automake Переменные для очистки Makefile.am - PullRequest
13 голосов
/ 24 июня 2011

У меня есть каталог / src, содержащий все мои исходные файлы, и / bin для хранения всех двоичных файлов после выполнения команды make. Каталог выглядит примерно так:

/BuildDirectory
- - /src
- - /bin
- - configure
- - Makefile.am
- - configure.ac 
- - ... 

Теперь в Makefile.am я должен указать:

bin_PROGRAMS = bin/x bin/y bin/z bin/k ...

bin_x_SOURCES = src/x.cpp
bin_y_SOURCES = src/y.cpp
bin_z_SOURCES = src/z.cpp

Есть ли переменная, которая может помочь избавиться от всех "bin /" и "src /"? Например, я просто указываю:

$BIN = bin
$SRC = src 

И они будут искать правильные файлы в правильных папках и компилировать их в правильные места.

Спасибо

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

Вы можете воспользоваться удаленным зданием.Поместите этот make-файл в каталог bin:

VPATH = ../src
bin_PROGRAMS = x y z k ...

x_SOURCES = x.cpp
y_SOURCES = y.cpp
z_SOURCES = z.cpp

Теперь замените текущий Makefile.am следующим:

SUBDIRS = bin

Теперь настройте файл configure.ac для создания bin / Makefile

AC_CONFIG_FILES([Makefile
        bin/Makefile])

и вы должны быть готовы к жизни.

2 голосов
/ 25 июня 2011

Не в моих силах. Если вы хотите отделить скомпилированные файлы от исходных файлов, помните, что вы можете создавать вне дерева:

$ cd foo-1.2.3
$ mkdir build
$ cd build
$ ../configure
$ make
$ make install

Если это именно то, что вы хотите сделать, вы можете сделать Makefile.am проще, создав двоичные файлы без префикса каталога (и все еще ссылаясь на вещи в src/ вручную).

1 голос
/ 04 июля 2011

Если то, что вы пытаетесь сделать, это то, что, я думаю, вы пытаетесь сделать, вы пытаетесь достичь чего-то вроде:

SRCDIR  = src
BINDIR  = bin

bin_PROGRAMS = $(BINDIR)/x $(BINDIR)/y $(BINDIR)/z

bin_x_SOURCES = $(SRCDIR)/x.cpp
bin_y_SOURCES = $(SRCDIR)/y.cpp
bin_z_SOURCES = $(SRCDIR)/z.cpp

Я проверял это несколько раз в различныхформы, и он не будет компилировать код, как это было бы с вашим примером;Я как-то убедил его в том, что он компилировал C в один этап:

gmake[1]: *** No rule to make target `bin/x.c', needed by `x.o'.  Stop.

Я, таким образом, совершенно уверен, что это невозможно.К сожалению.

...