2012-01-27 6 views
0

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

.. 
../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

SUBDIRS = ГКЗ

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

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. 

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

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

Спасибо.

+0

Если у вас есть tarball или git repo где-то, лучше посмотреть. –

+0

Похоже, нет src/bar/Makefile. Есть ли файл src/bar/Makefile.in? –

+0

AC_PROG_LIBTOOL устарел. Вместо этого используйте LT_INIT. Кроме того, вместо «configure.in» используйте «configure.ac». –

ответ

0

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

Смежные вопросы