【问题标题】:subdir-objects option for automake doesn't workautomake 的 subdir-objects 选项不起作用
【发布时间】:2014-12-25 17:08:01
【问题描述】:

阅读autotools mythbuster 之后,我尝试使用subdir-objects 编写一个非递归makefile 的小示例,以便将我的二进制文件放在我的源文件目录中.

这是我的小测试的组织

/
   autogen.sh
   configure.ac
   Makefile.am
   src/
      main.c

autogen.sh

#!/bin/sh
echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1
echo "Running autoheader..." ; autoheader || exit 1
echo "Running autoconf..." ; autoconf || exit 1
echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
./configure "$@"

configure.ac

AC_PREREQ([2.69])
AC_INIT([test], [0.0.1], [devel@hell.org])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC
AM_INIT_AUTOMAKE([1.14 foreign subdir-objects])
AM_MAINTAINER_MODE([enable])
AC_OUTPUT(Makefile)

Makefile.am

MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in configure depcomp install-sh missing compile
bin_PROGRAMS=toto
toto_SOURCES=src/main.c

我用 :

编译所有内容
./autogen.sh
make

我以为二进制 toto 会使用选项 subdir-objects 在 src 目录中创建,但似乎此选项无效,并且 toto 二进制文件始终在根目录中生成.

我也尝试在 Makefile.am 中使用 AUTOMAKE_OPTIONS = subdir-objects 传递此选项,但没有成功。

【问题讨论】:

  • make 将自动查找名为 Makefile 或 makefile 或 Makefile.mak 或 makefile.mak 的文件。它不会寻找文件名 Makefile.am。所以使用 make -f Makefile.am
  • make -f Makefile.am工作。 Makefile 是由 Automake 和 configureMakefile.am 生成的。

标签: c makefile autotools


【解决方案1】:

这不是 subdir-objects 选项的作用。它将intermediate 构建结果,尤其是*.o object files,放在与构建它们的源相同的目录中。特别是,您应该在那里找到main.o,而不是在顶级目录中。

另一方面,最终构建结果必须是您在 Automake 文件中指定的内容和位置。如果你想让toto 也进入src/ 目录,那么使用这个Makefile.am

MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in configure depcomp install-sh missing compile
bin_PROGRAMS=src/toto
src_toto_SOURCES=src/main.c

【讨论】:

  • 我可以根据经验证明,您完全可以以这种方式使用 Automake 进行非递归构建。但是,您可能会发现对文档或头文件 installs. 使用有限递归很有用
  • 另外,我从来没有发现autogen.sh 是必要的,MAINTAINERCLEANFILES 变量中列出的所有内容要么默认由make maintainer-clean 清理,要么根本不应该清理。我自己,我会摆脱这两个。
  • 我从 elementary 库(EFL,Enligthenment)的代码示例中获取了 autogen.sh 和 MAINTAINERCLEANFILES 的技巧。
猜你喜欢
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多