gpt4 book ai didi

c - automake 的 subdir-objects 选项不起作用

转载 作者:行者123 更新时间:2023-12-04 09:32:54 25 4
gpt4 key购买 nike

看完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 二进制文件总是在根目录中生成.

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

最佳答案

这不是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com