阅读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], [[email protected]])
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来传递此选项,但是没有成功。
最佳答案
这不是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
关于c - automake的subdir-objects选项不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26639779/