Il existe deux façons de gérer cela, créer un processus de construction d'outils auto séparé ou supprimer les outils automatiques et le code main ou créer un nouveau Makefile
.
myprojectfoo
|
+-- src
|
+-- man
|
+-- messages
|
+-- lib
|
+-- include
|
+-- others
Jetez un oeil à l'illustration ci-dessus, pour un projet fictif appelé myprojectfoo
et utilise des outils d'auto-construire un binaire appelé foo
. Le répertoire de haut niveau à savoir myprojectfoo
aura configure.ac, Makefile.am et Makefile.in, dans les sous-répertoires il y aurait au moins Makefile.am et Makefile.in. Les outils automatiques vont créer et exécuter les commandes make pour construire le projet.
Maintenant, d'après ce que je comprends ce que vous essayez de faire:
myprojectfoo
| \/
+-- sXc
| /\
+-- man
|
+-- messages
|
+-- lib
| \/
+-- incXude
| /\
+-- others
Vous voulez prendre le sous-répertoire src
et il est include's
aussi. Alors dans ce cas, il serait plus facile de créer un Makefile séparé (read - pas d'auto-tools) construire .. dans ce cas, ce serait plus facile.
La meilleure façon que je peux penser est, vous devrez prendre cette décision en fin de compte, la taille est le sous-ensemble des sources du projet que vous souhaitez extraire, une fois que vous aller de l'avant avec cela, supprimer tous les les références à Makefile.am, Makefile.in ... et emprunter un modèle de Makefile simple existant pour le construire et l'invoquer comme celui-ci
make -f MyMakefile
OU
Si vous voulez construire un projet distinct en utilisant ce sous-ensemble en utilisant des outils d'auto-:
- Créer un bare-bones
Makefile.am
comme indiqué ci-dessous.
- Créer un bare-bones
configure.ac
comme indiqué ci-dessous ...
- Run autoscan la source pour choisir les dépendances, ajoutez les résultats du fichier de sortie 'configure.scan' au
configure.ac
- Run automake (Faites-le une fois!)
- Exécutez ensuite autoconf.Il peut se plaindre de manquer des fichiers tels que INSTALLER, COPIER etc
- Puis toute modification ultérieure de
configure.ac
, exécutez autoreconf après, qui exécutera automake, autoconf, et d'autres programmes de soutien auto-outils.
Prendre un échantillon du Makefile.am
pour Linux ...
SUBDIRS = src include
ACLOCAL_AMFLAGS = -I m4
Prendre un échantillon du configure.ac
pour Linux ...
AC_PREREQ(2.63)
AC_INIT([mysubsetprojectfoo], [0.1a], [[email protected]])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([-Wall -Werror])
AM_GNU_GETTEXT_VERSION([0.17])
AM_GNU_GETTEXT([external])
AM_CFLAGS=
# Checks for programs.
AC_HEADER_STDC
AC_PROG_CC
AC_ARG_ENABLE([debug],
[ --enable-debug Turn on debugging],
[case "${enableval}" in
yes) debug=true ;;
no) debug=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[debug=false])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
# Checks for libraries.
AC_CHECK_LIB([mylib], [mylib_function], [:])
if test "$mylib" = :; then
AC_MSG_ERROR([MyLib is missing.\
This can be downloaded from 'http://www.foo.baz'])
fi
AC_CONFIG_HEADERS([config.h])
# Checks for header files.
# FROM running 'autoscan' on the source directory
AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h locale.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_INLINE
AC_C_CONST
AC_TYPE_SIGNAL
AC_TYPE_PID_T
AC_TYPE_UID_T
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror])
AC_CONFIG_FILES([Makefile src/Makefile include/Makefile])
AC_OUTPUT
Les commandes pour les outils d'auto, C'est le sommet de ma tête et j'ai peut-être manqué quelque chose ... N'hésitez pas à le signaler en plaçant un commentaire sur ce sujet au bas de ce post et il sera modifié en conséquence.
Trop complexe ... Je viens de finir de copier l'ensemble du projet et de supprimer des parties du script "./configure" qui se plaignaient de choses manquantes. Je voulais extraire un petit programme supplémentaire de la grande chose. Il a également eu des dépendances supplémentaires inutiles. –
Je pensais qu'il y avait peut-être quelque chose qui analysait makefiles (si gros à cause des autotools) et qui trouvait un sous-ensemble de fichiers sources utilisés pour construire la cible donnée. –
Plutôt que d'exécuter automake et autoconf directement (et d'oublier d'exécuter aclocal, autoheader, libtoolize, etc.), il est plus facile de lancer simplement autoreconf. Cela invoquera tous les autotools requis dans le bon ordre. –