automake的subdir-objects选项不起作用

时间:2014-10-29 20:12:45

标签: c makefile autotools

在阅读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将在src目录中使用选项 subdir-objects 创建,但似乎此选项无效,并且toto二进制文件始终在根目录中生成

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

1 个答案:

答案 0 :(得分:3)

这不是subdir-objects选项的作用。它将中间构建结果(尤其是*.o 目标文件)放在与构建它们的源相同的目录中。特别是,您应该在那里找到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