autotools: no rule to make target all

Posted by Raffo on Stack Overflow See other posts from Stack Overflow or by Raffo
Published on 2012-01-27T11:49:25Z Indexed on 2012/04/04 11:29 UTC
Read the original article Hit count: 258

Filed under:
|
|

I'm trying to port an application I'm developing to autotools. I'm not an expert in writing makefiles and it's a requisite for me to be able to use autotools. In particular, the structure of the project is the following:

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

The root folder of the project contains a "src" folder containing the main of the program AND a number of subfolders containing the other sources of the program. The root of the project also contains an "inc" folder containing the .h files that are nothing more than the definitions of the classes in "src", thus "inc" reflects the structure of "src".

I have written the following configure.in in the root:

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

And the following is ../Makefile.am

SUBDIRS = src

and then in ../src where the main of the project is contained:

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

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

And the analogous in src/bar.

The problem is that after calling automake and autoconf, when calling "make" the compilation fails. In particular, the program enters the directory src, then foo and creates libfoo.a, but the same fail for libbar.a, with the following error:

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

I have read the autotools documentation, but I'm not able to find a similar example to the one I am working on. Unfortunately I can't change the directory structure as this is a fixed requisite of the project I'm working on.

I don't know if you can help me or give me any hint, but maybe you can guess the error or give me a link to a similar structured example.

Thank you.

© Stack Overflow or respective owner

Related posts about c++

Related posts about autotools