Ich habe diese link gefolgt und seine Schritte angepasst, damit es für mein Projekt funktioniert.Kann cpp Projekt nicht vollständig als statische Bibliothek kompilieren und verknüpfen
Mein Ziel ist es, eine libfile.a
zu erstellen, um als eine statische Bibliothek zu verteilen. Der Projektbaum ist die folgende:
project
|
+-src
+- <some cpp and hpp files>
|
+ containers
|
+- <other cpp and hpp files>
Ich habe leicht configure.ac
-Datei und die Makefile.am
s. Die Baumstruktur verändert auf diese Weise:
project
|
+- configure.ac
+- Makefile.am
+-src
+- <some cpp and hpp files>
+ Makefile.am
|
+ containers
|
+- <other cpp and hpp files>
Nun, wenn ich gehen: (*)
aclocal; autoreconf --install; autoconf; ./configure
make
.o files
erzeugt für alle .*pp files
in src
enthalten ist, aber es funktioniert nicht, wenn es beginnt, diese Ziele in src/containers
Erzeugen . So wird die Makefile
nicht richtig generiert. Was mache ich falsch? Kann mir jemand helfen?
PS hier gibt es Dateien beteiligt:
# --- configure.ac ---
AC_PREREQ([2.68])
AC_INIT([filea], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([filea], [1.0])
AC_CONFIG_SRCDIR([src/HashFunctions.cpp])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CXX
AC_PROG_RANLIB
AC_CHECK_HEADERS([stddef.h stdint.h string.h])
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT8_T
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_CHECK_FUNCS([memset])
AC_OUTPUT([Makefile src/Makefile])
# --- Makefile.am ---
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src
# --- src/Makefile.am ---
lib_LIBRARIES = libfile.a
libfile_a_SOURCES = \
ConfigLib.hpp \
ConfigLib.cpp \
HashFunctions.cpp \
HashFunctions.hpp \
Logger.hpp \
Logger.cpp \
Queue.hpp
libfile_a_SOURCES += \
containers/SafeContainer.cpp \
containers/SafeInterger.cpp \
containers/SafeMap.cpp
EDIT 1 wie Brett Hale schlugen die mit (*)
gekennzeichneten Befehle sind durch folgende ersetzt worden:
autoreconf -fvi
Ausgang:
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
autoreconf: Leaving directory `.'
Wenn mit dem Gehen:
./configure
make
Noch keine Regeln gefunden erzeugen Ziele im Unterverzeichnis.
EDIT 2 ich auf einen nicht-rekursive Ansatz geschaltet (Dank Karel Zak's blog) und schließlich kann ich meine lib make
.
Können Sie versuchen: 'autoreconf -fvi' anstelle von' aclocal; ....; Befehle? –
Darf ich vorschlagen, [SCons] (http://scons.org), [CMake] (https://cmake.org) und andere Build-Systeme zu untersuchen - sogar einfach [make] (https: //www.gnu. org/software/make /) - * alles * aber der Horror, der 'autoconf' /' automake' ist ... –
@JesperJuhl - ja, CMake begann mit reinen Absichten ... nur um zu sehen, dass es ein * hard * ist Problem und erfindet effektiv das Rad ohne die 20 Jahre Erfahrung in den Autotools - zusammen mit einer Syntax, die sonst nirgends verwendet wird - im Gegensatz zu bash/m4. –