2011-06-24 7 views
12

Mam katalog/src zawierający wszystkie moje pliki źródłowe i/bin do przechowywania wszystkich plików binarnych po uruchomieniu polecenia make. Katalog jest coś takiego jak poniżej:Zmienne Automake do uporządkowania Makefile.am

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

Teraz w Makefile.am, muszę określone: ​​

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 

Czy istnieje zmienna, która może pomóc pozbyć się wszystkich „bin /” i " src/"? Na przykład po prostu podać:

$BIN = bin 
$SRC = src 

I będą szukać odpowiednich plików w odpowiednich folderów i skompilować je do właściwych miejscach.

Dzięki

Odpowiedz

4

Możesz skorzystać ze zdalnego budynku. Umieść ten makefile w bin dir:

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

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

Teraz zastąpi obecny Makefile.am z tym jednym:

SUBDIRS = bin 

Teraz dostrojenia configure.ac również generować bin/Makefile

AC_CONFIG_FILES([Makefile 
     bin/Makefile]) 

i powinieneś być gotowy do życia.

+0

Myślę, że VPATH jest tym, czego potrzebuję! świetne informacje – w00d

2

Nie zgodnie z moją wiedzą. Jeśli szukasz oddzielić skompilowane pliki z plików źródłowych, należy pamiętać, że można budować na zewnątrz drzewa:

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

jeśli to jest to, czego szukasz zrobić, można zrobić prościej Makefile.am przez tworzenie plików binarnych bez prefiksu katalogu (i wciąż odwoływanie się do rzeczy w ręce src/).

+0

Korzystanie z obsługi zdalnego budowania dostarczanej przez markę jest lepszym rozwiązaniem, chociaż tego nie znałem :) – DipSwitch

1

Jeśli to, co starasz się zrobić to, co myślę, że starasz się zrobić, starasz się osiągnąć coś takiego:

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 

Przetestowałem to kilka razy w różnych formach i nie skompiluje kodu tak jak w twoim przykładzie; I jakoś przekonał go, że został kompilacji C na jednej scenie:

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

więc jestem dość pewny, że to nie jest możliwe. Przepraszam.

Powiązane problemy