Autotools knihovnu a objekt regulace výstupní soubor

hlasů
6

Mým cílem je, aby všechny soubory objektů postavených v .objs adresáři namísto kořenu Makefile a mít binární soubory (a knihoven) zkopírovány do projektu bin / adresář. Ale já jsem nebyl schopen najít žádné prostředky vysvětlit, jak to udělat. Jak bych mohl jít asi dělá?

Tady je můj configure.ac a src / Makefile.am - mám podobné soubory Makefile.am pro dva sdílené knihovny, na které odkazuje. Sestavují a po zkopírování je na bin / adresář práci, jak by měly. Jen se dívám na tento proces automatizovat.

configure.ac

AC_PREREQ([2.63])
AC_INIT([gtkworkbook], [0.12], [j_bellone@users.sourceforge.net])
AC_CONFIG_SRCDIR([gtkworkbook/cell.c])
AM_INIT_AUTOMAKE([gtkworkbook], [0.12])

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PROG_LIBTOOL
AC_PROG_CC_C_O

AC_CHECK_LIB([pthread], [pthread_mutex_init], [], [
            echo pthread library is missing. pthread is required for this program
            exit -1])

# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T

# Checks for library functions.
AC_CHECK_FUNCS([gethostbyname memset socket])

AC_OUTPUT([Makefile
       csv/Makefile
       gtkworkbook/Makefile
       src/Makefile])

src / Makefile.am

AUTOMAKE_OPTIONS= foreign

C_FLAGS= -I/usr/local/include -I/usr/include -I/usr/local/include/gtkextra-2.0 -I$(top_srcdir)/include `pkg-config gtk+-2.0 glib-2.0 --cflags`
L_FLAGS= -L/usr/local/lib -L/usr/lib -L$(top_srcdir)/lib `pkg-config gtk+-2.0 glib-2.0 --libs` -lgtkextra-x11-2.0

bin_PROGRAMS= gtkworkbook
gtkworkbook_SOURCES= application.c config.c main.c parse.c plugin.c
gtkworkbook_CFLAGS= -Wall -lgthread-2.0 -std=c99 $(C_FLAGS)  
gtkworkbook_LFLAGS= -ldl $(L_FLAGS)
gtkworkbook_LDFLAGS= $(L_FLAGS)
gtkworkbook_LDADD= ../gtkworkbook/libgtkworkbook.la ../csv/libcsv.la

lib_LTLIBRARIES= realtime.la
realtime_la_SOURCES= realtime/CsvParser.cpp realtime/Network.cpp realtime/Packet.cpp realtime/plugin_main.cpp \
    realtime/thread_main.cpp realtime/concurrent/Mutex.cpp realtime/concurrent/Semaphore.cpp \
    realtime/concurrent/Thread.cpp realtime/concurrent/ThreadGroup.cpp realtime/concurrent/ThreadPool.cpp \
    realtime/proactor/Dispatcher.cpp realtime/proactor/Event.cpp realtime/proactor/Proactor.cpp \
    realtime/proactor/InputDispatcher.cpp realtime/proactor/Worker.cpp realtime/network/Tcp.cpp
realtime_la_CPPFLAGS= -Wall -Wno-write-strings $(C_FLAGS)
realtime_la_LFLAGS= -lgtkworkbook -lcsv $(L_FLAGS)
realtime_la_LDFLAGS= -module -export-dynamic 
realtime_la_LIBADD= ../gtkworkbook/libgtkworkbook.la ../csv/libcsv.la

Takže moje otázka je, jak určit výstupních adresářů na výsledky kompilace každého Makefile (Přeji si, aby byly zkopírovány do bin / , a pro objekt soubory být v obj každého projektu namísto v kořenové Makefile ,

Díky za pomoc tak daleko .. Tato stránka byla velký zdroj, a já jsem se naučil hodně z odkazů uvedených již.

Položena 19/06/2009 v 00:23
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
10

GNU Build System nepoužívá obj/adresářů, takže Autotools nejsou navrženy tak, aby podporovaly to.

Nicméně Neumím si představit dva způsoby, jak vyřešit tento.

Jako instalační, můžete vytvořit libovolný soubor ze svého zdrojového adresáře zadáním

mkdir builddir
cd builddir
../path-to-sourcedir/configure
make

Pak bude vytvořen jakýkoliv výstupní soubor v builddir/adresáři. Tento režim kompilace umožňuje sestavit zdrojový kód z uložené v pouze pro čtení adresáře (to dávalo větší smysl zpět do let, kdy byla FSF distribuují CD s nekomprimované zdrojového kódu), nebo kompilaci stejný zdroj s nastavením différents (nebo dokonce pro odlišné architektury).

Jako balírny, jediný způsob, jak by mohl přinutit balíček postavit vše obj/je, aby vaše Makefile.amin obj/a prohlásit všechny své sestavení pravidla zde. To by znamenalo obj/Makefile.amvypadá jako:

bin_PROGRAMS = foo bar
foo_SOURCES = ../src/foo/main.c ../src/foo/help.c ../src/foo/list.c
bar_SOURCES = ../src/bar/bar.c 

atd. Vzpomínám si, že před 10 lety, představovat, Palm OS Emulator byl pomocí nastavení jako výše uvedené. Nedoporučuji to, jak to ve skutečnosti není udržovatelná. Je to opravdu lepší držet s filozofií nástrojů, a použít sestavení systémů, které fungují stejně jako u ostatních balíčků GNU.

Pro úvod do GNU Build System, doporučuji prostudovat zavedení manuálu Automake: http://www.gnu.org/software/automake/manual/automake.html#GNU-Build-System

Zejména část use-případů. Pokud nechcete starat o tyto případy použití, myslím, že bude nejlepší kurz NENÍ používat Automake, a vytvořit si vlastní Makefiles. V opačném případě budete snažit přinutit Automake dělat něco, co není určen pro a budete rychle nenávidět.

EDIT 2013-08-26 : Všimněte si, že projekt Automake pomocí podadresář používání obj/není přenosná na BSD make.

Odpovězeno 23/06/2009 v 14:10
zdroj uživatelem

hlasů
0

Nejjednodušší způsob, jak toho dosáhnout, by bylo stanovit „libdir“ do adresáře, který chcete tyto soubory skončí v a pomocí cíl instalaci zkopírovat tam.

To by zabránit použitím cíl instalovat v konvenčním smyslu ačkoli.

Odpovězeno 19/06/2009 v 00:30
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more