autotools: нет правил, чтобы сделать цель всех

Я пытаюсь перенести приложение, которое я разрабатываю, на автоинструменты. Я не эксперт в написании make-файлов, и мне необходимо уметь пользоваться автоинструментами. В частности, структура проекта следующая:

..
../src/Main.cpp
../src/foo/
../src/foo/x.cpp
../src/foo/y.cpp
../src/foo/A/k.cpp
../src/foo/A/Makefile.am
../src/foo/Makefile.am
../src/bar/
../src/bar/z.cpp
../src/bar/w.cpp
../src/bar/Makefile.am
../inc/foo/
../inc/bar/
../inc/foo/A
../configure.in
../Makefile.am

Корневая папка проекта содержит папку «src», содержащую основную часть программы, И ряд подпапок, содержащих другие исходные коды программы. Корень проекта также содержит папку «inc», содержащую файлы .h, которые представляют собой не что иное, как определения классов в «src», поэтому «inc» отражает структуру «src».

Я прописал в корень следующий configure.in:

AC_INIT([PNAME], [1.0])
AC_CONFIG_SRCDIR([src/Main.cpp])
AC_CONFIG_HEADER([config.h])

AC_PROG_CXX
AC_PROG_CC
AC_PROG_LIBTOOL

AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_FILES([Makefile 
    src/Makefile 
    src/foo/Makefile 
    src/foo/A/Makefile 
    src/bar/Makefile])
AC_OUTPUT

И следующее ../Makefile.am

ПОДКАТЫ = источник

а затем в ../src, где содержится основная часть проекта:

bin_PROGRAMS = pname
gsi_SOURCES = Main.cpp
AM_CPPFLAGS = -I../../inc/foo\
    -I../../inc/foo/A \
    -I../../inc/bar/ 
pname_LDADD= foo/libfoo.a bar/libbar.a
SUBDIRS = foo bar

и в ../src/foo

noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = \
    x.cpp \
    y.cpp

AM_CPPFLAGS = \
    -I../../inc/foo \
    -I../../inc/foo/A \
    -I../../inc/bar

И аналог в src/bar.

Проблема в том, что после вызова automake и autoconf при вызове "make" компиляция завершается неудачно. В частности, программа заходит в директорию src, затем foo и создает libfoo.a, но то же самое не получается для libbar.a со следующей ошибкой:

Making all in bar
make[3]: Entering directory `/user/Raffo/project/src/bar'
make[3]: *** No rule to make target `all'.  Stop.

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

Я не знаю, сможете ли вы мне помочь или подскажете, но, может быть, вы угадаете ошибку или дадите мне ссылку на аналогичный структурированный пример.

Спасибо.


person Raffo    schedule 27.01.2012    source источник
comment
Если у вас где-то есть tarball или репозиторий git, лучше посмотреть.   -  person jørgensen    schedule 27.01.2012
comment
Похоже, что нет src/bar/Makefile. Существует ли файл src/bar/Makefile.in?   -  person William Pursell    schedule 27.01.2012
comment
AC_PROG_LIBTOOL устарел. Вместо этого используйте LT_INIT. Также используйте configure.ac вместо configure.in.   -  person William Pursell    schedule 27.01.2012


Ответы (1)


если он терпит неудачу в src/bar, почему src/bar/Makefile.am единственный код, который вы не публикуете?

и, кстати, вы должны использовать $(srcdir) или $(top_srcdir), а не ссылаться на относительные пути, такие как «../../» (это удобно, если люди хотят создавать двоичные файлы, не загрязняя исходный каталог)

person umläute    schedule 04.04.2012