【问题标题】:autotools: no rule to make target allautotools:没有规则使目标全部
【发布时间】:2012-02-20 09:59:13
【问题描述】:

我正在尝试将我正在开发的应用程序移植到 autotools。我不是编写 makefile 的专家,我必须能够使用 autotools。 具体来说,项目的结构如下:

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

然后在包含项目主体的 ../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.

我已阅读 autotools 文档,但找不到与我正在研究的示例类似的示例。不幸的是,我无法更改目录结构,因为这是我正在处理的项目的固定要求。

我不知道您是否可以帮助我或给我任何提示,但也许您可以猜到错误或给我一个类似结构化示例的链接。

谢谢。

【问题讨论】:

  • 如果你在某个地方有 tarball 或 git repo,最好看看。
  • 好像没有src/bar/Makefile。 src/bar/Makefile.in 存在吗?
  • AC_PROG_LIBTOOL 已过时。请改用 LT_INIT。另外,请使用“configure.ac”而不是“configure.in”。

标签: c++ autotools automake


【解决方案1】:

如果在 src/bar 中失败,为什么 src/bar/Makefile.am 是您不发布的唯一代码?

顺便说一句,您应该使用 $(srcdir) 或 $(top_srcdir) 而不是引用诸如“../../”之类的相对路径(如果人们想在不污染源目录的情况下生成二进制文件,这将派上用场)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多