Есть два способа справиться с этим: создать отдельный процесс сборки автоинструментов или покончить с автоинструментами и кодом руки или создать новый Makefile
.
myprojectfoo
|
+-- src
|
+-- man
|
+-- messages
|
+-- lib
|
+-- include
|
+-- others
Иметьпосмотрите на иллюстрацию выше, для вымышленного проекта с именем myprojectfoo
, который использует автоинструменты для создания двоичного файла с именем foo
.Каталог верхнего уровня, т. Е. myprojectfoo
, будет иметь configure.ac , Makefile.am и Makefile.in , в подкаталогах должно быть не менее Makefile.am и Makefile.in .Автоинструменты будут создавать и выполнять команды make для создания проекта.
Теперь из того, что я понимаю в том, что вы пытаетесь сделать:
myprojectfoo
| \ /
+-- sXc
| / \
+-- man
|
+-- messages
|
+-- lib
| \ /
+-- incXude
| / \
+-- others
Вы хотитеизвлеките подкаталог src
, а также include's
.Тогда в этом случае будет проще создать отдельный Makefile ( read - no auto-tools ) build .. в этом случае это будетПолегче.
Лучший способ, которым я могу об этом думать, это то, что вам в конечном итоге придется принять это решение, насколько велико подмножество источников проекта, которые вы хотите извлечь как только вы это сделаете, удалите все ссылки на Makefile.am , Makefile.in ... и позаимствуйте существующий простой шаблон Makefile для его создания и запускайте его следующим образом
make -f MyMakefile
ИЛИ
Если вы хотите построить отдельный проект с использованием этого подмножества с помощью автоинструментов:
- Создать голыйbones
Makefile.am
, как показано ниже. - Создайте базовые элементы
configure.ac
, как показано ниже ... - Запустите autoscan на источнике, чтобы выбрать зависимости, добавьте результаты выходного файла 'configure.scan' в
configure.ac
- Выполните automake (Сделайте это один раз!)
- Выполните autoconf тогда.Он может жаловаться на отсутствующие файлы, такие как INSTALL, COPYING и т. Д.
- Затем любые последующие изменения
configure.ac
, после этого запустить autoreconf , что приведет к выполнению automake , autoconf и другие поддерживаемые программы автоинструментов.
Взятие образца Makefile.am
для Linux ...
SUBDIRS = src include
ACLOCAL_AMFLAGS = -I m4
Взятие образцаconfigure.ac
для Linux ...
AC_PREREQ(2.63)
AC_INIT([mysubsetprojectfoo], [0.1a], [foo@bar.baz])
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
Команды для автоинструментов - это моя голова, и я, возможно, что-то упустил. Не стесняйтесь указать, разместив комментарий к этомувнизу этого поста, и в него будут внесены соответствующие изменения.