Vytvárajem zdieľanú knižnicu a štruktúru štruktúry stromu takto:
Makefile.am
src/
Makefile.am
srcfile1.h
srcfile1.cpp
...
thirdpaty/
Makefile.am
lib1/
Makefile.am
lib1.h
lib1.cpp
...
lib2/
...
Používam rekurzívny Automake, pretože niektoré knižnice tretích strán sú distribuované s vlastnými súbormi Automake. src/Makefile.am
obsahuje bežné makrá libtoolu:
lib_LTLIBRARIES = libmylib.la
libmylib_la_SOURCES = scrfile1.h srcfile1.cpp ...
Ako prepojiť hlavnú knižnicu s treťou stranou? Autotools manuál ma vedie k presvedčeniu, že knižnice tretích strán musia byť postavené ako libtool komfortné knižnice, takže mám nasledujúce thirdparty/lib1/Makefile.am
:
noinst_LTLIBRARIES = libthirdpaty1.la
libthirdpaty1_la_SOURCES = lib1.cpp lib1.h
A pridajte nasledujúce informácie src/Makefile.am
:
libmylib_la_LIBADD = $(top_buildir)/thirdparty/lib1/libthirdpaty1.la
Môj root Makefile.am obsahuje makro INCLUDES:
INCLUDES = -I$(top_builddir)/thirdparty
Ale budovanie s touto konfiguráciou mi dáva nedefinované chyby symbolov.
Aký je správny spôsob štruktúry tohto zdrojového kódu a prepojenie všetkých knižníc?
odpovede:
0 pre odpoveď č. 1Ukazuje sa, že rozloženie zdroja a využitie libtoolu boli v poriadku, ale môj root Makefile.am mal nasledujúce makro:
SUBDIRS = src thirdparty
Čo malo byť
SUBDIRS = thirdparty src
Vzhľadom k tomu, kód v src/
odkazoval na kód v thirdparty/
, thirdparty/
kód musí byť postavený ako prvý. SUBDIRS
makro spôsobí, že podadresáre budú vytvorené v poradí, v akom sú zadané, zľava doprava.