Я пытаюсь перенести приложение, которое я разрабатываю для автоуправления. Я не эксперт в написании 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, но я не смог найти аналогичный пример тому, над которым я работаю. К сожалению, я не могу изменить структуру каталогов, поскольку это фиксированный реквизит проекта, над которым я работаю.
Я не знаю, можете ли вы мне помочь или дать мне подсказку, но, возможно, вы можете угадать ошибку или дать мне ссылку на аналогичный структурированный пример.
Спасибо.
Если у вас есть tarball или git repo где-то, лучше посмотреть. –
Похоже, нет src/bar/Makefile. Есть ли файл src/bar/Makefile.in? –
AC_PROG_LIBTOOL устарел. Вместо этого используйте LT_INIT. Кроме того, вместо «configure.in» используйте «configure.ac». –