autotools -- make[1]: *** 没有将目标设为“全部”的规则。停止

Posted

技术标签:

【中文标题】autotools -- make[1]: *** 没有将目标设为“全部”的规则。停止【英文标题】:autotools -- make[1]: *** No rule to make target `all'. Stop 【发布时间】:2014-09-29 22:12:38 【问题描述】:

我创建了一个使用自动工具构建的简单测试应用程序 + 库。问题是生成的 Makefile 不理解“all”目标。

Makefile.am:

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src
VERSION=0:0:0
EXTRA_DIST = autogen.sh

bin_PROGRAMS = testApp

libtest_la_SOURCES = src/testLibrary.c
libtest_la_LDFLAGS = -version-info $VERSION

testApp_SOURCES = src/testApp.c
testApp_LDADD = libtest.la
lib_LTLIBRARIES = libtest.la

配置.ac:

AC_INIT(foobar, 1.0, me@mail.com)
AC_CONFIG_AUX_DIR(config)
AC_CONFIG_SRCDIR(src)
AC_PROG_CC
AM_PROG_CC_C_O
LT_INIT
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([subdir-objects])
AC_OUTPUT(Makefile)

“make”命令的输出:

Making all in src
make[1]: *** No rule to make target `all'.  Stop.
make: *** [all-recursive] Error 1

但是 make 理解“testApp”目标并成功构建它。根据我对 autotools 的有限了解,bin_PROGRAMS 变量应该为“all”目标提供其数据?

【问题讨论】:

【参考方案1】:

您似乎正在结合递归和非递归的 make 规则。

如果您删除此行:

SUBDIRS = src

这个错误可能会消失。它正在src/Makefile 中寻找all 规则。

【讨论】:

以上是关于autotools -- make[1]: *** 没有将目标设为“全部”的规则。停止的主要内容,如果未能解决你的问题,请参考以下文章

makefile autotools

重新排序 gnu autotools 链接器标志

在 autotools 项目中包含(仅标头)库

GNU autotools自动生成Makefile 介绍

GNU autotool:没有规则来制定目标

如何在 c++ Autotools 项目中使用不同版本的 g++ 进行编译