Как извлечь часть проекта на основе GNU Build System? - PullRequest
0 голосов
/ 24 мая 2010

Когда я перемещаю какой-то подкаталог из проекта, управляемого "./configure" и всего прочего, он пытается добраться до "../../configure.ac" и других вещей, и его нелегко собрать.1001 *

Как извлечь часть такого проекта и сделать его независимым?

1 Ответ

0 голосов
/ 24 мая 2010

Есть два способа справиться с этим: создать отдельный процесс сборки автоинструментов или покончить с автоинструментами и кодом руки или создать новый 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

ИЛИ

Если вы хотите построить отдельный проект с использованием этого подмножества с помощью автоинструментов:

  1. Создать голыйbones Makefile.am, как показано ниже.
  2. Создайте базовые элементы configure.ac, как показано ниже ...
  3. Запустите autoscan на источнике, чтобы выбрать зависимости, добавьте результаты выходного файла 'configure.scan' в configure.ac
  4. Выполните automake (Сделайте это один раз!)
  5. Выполните autoconf тогда.Он может жаловаться на отсутствующие файлы, такие как INSTALL, COPYING и т. Д.
  6. Затем любые последующие изменения 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

Команды для автоинструментов - это моя голова, и я, возможно, что-то упустил. Не стесняйтесь указать, разместив комментарий к этомувнизу этого поста, и в него будут внесены соответствующие изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...