0

当我将一些子目录从“./configure”管理的项目和所有这些东西中移开时,它会尝试访问一些“../../configure.ac”和其他东西,并且不容易构建。

如何提取此类项目的一部分并使其独立?

4

1 回答 1

0

有两种方法可以解决这个问题,创建一个单独的自动工具构建过程,或者取消自动工具和手动代码,或者创建一个新的Makefile.

我的项目富
   |
   +-- 源代码
   |
   +-- 男人
   |
   +-- 消息
   |
   +-- 库
   |
   +-- 包括
   |
   +-- 其他

看一下上面的插图,一个名为的虚构项目myprojectfoo正在使用自动工具构建一个名为foo. 顶级目录即myprojectfooconfigure.acMakefile.amMakefile.in,在子目录中至少有Makefile.amMakefile.in。自动工具将创建并执行 make 命令来构建项目。

现在,根据我对您正在尝试做的事情的理解:

我的项目富
   | \ /
   +-- sXc
   | / \
   +-- 男人
   |
   +-- 消息
   |
   +-- 库
   | \ /
   +-- 包括徐德
   | / \
   +-- 其他

你想取出src子目录,它include's也是。然后在这种情况下,创建一个单独的 Makefile(读取-没有自动工具)构建会更容易。在这种情况下,它会更容易。

我能想到的最好方法是,您最终必须做出决定,您要提取的项目源的子集有多大,一旦您继续这样做,请删除对Makefile.amMakefile 的所有引用。在... 并借用现有的简单 Makefile 模板来构建它并像这样调用它

make -f 我的Makefile

或者

如果您想使用自动工具使用该子集构建一个单独的项目:

  1. 创建一个准系统Makefile.am,如下所示。
  2. 创建一个准系统configure.ac,如下所示...
  3. 在源上运行自动扫描以挑选依赖项,将输出文件“configure.scan”的结果添加到configure.ac
  4. 运行automake(执行一次!)
  5. 然后运行​​autoconf。它可能会抱怨缺少文件,例如安装、复制等
  6. 然后对 进行任何后续更改configure.ac,然后运行​​autoreconf,这将执行automakeautoconf和其他支持自动工具程序。

Makefile.amLinux 为例...

SUBDIRS = src 包括
ACLOCAL_AMFLAGS = -I m4

configure.acLinux 为例...

AC_PREREQ(2.63)

AC_INIT([mysubsetprojectfoo], [0.1a], [foo@bar.baz])
AC_CONFIG_AUX_DIR([构建辅助])

AM_INIT_AUTOMAKE([-Wall -Werror])
AM_GNU_GETTEXT_VERSION([0.17])
AM_GNU_GETTEXT([外部])
AM_CFLAGS=
# 检查程序。
AC_HEADER_STDC
AC_PROG_CC

AC_ARG_ENABLE([调试],
[ --enable-debug 打开调试],
[案例“${enableval}”在
  是的)调试=真;;
  否)调试=假;;
  *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
esac],[调试=假])
AM_CONDITIONAL([调试],[测试 x$debug = xtrue])
# 检查库。
AC_CHECK_LIB([mylib], [mylib_function], [:])
如果测试 "$mylib" = :; 然后
        AC_MSG_ERROR([MyLib 丢失。\
                                  这可以从“http://www.foo.baz”下载])
菲
AC_CONFIG_HEADERS([config.h])

# 检查头文件。
# FROM 在源目录上运行“自动扫描”
AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h locale.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h])

# 检查类型定义、结构和编译器特性。
AC_C_INLINE
AC_C_CONST
AC_TYPE_SIGNAL
AC_TYPE_PID_T
AC_TYPE_UID_T
AC_TYPE_SIZE_T

# 检查库函数。
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror])

AC_CONFIG_FILES([Makefile src/Makefile 包含/Makefile])
AC_OUTPUT

自动工具的命令,是我的头等大事,我可能错过了一些东西..随时通过在本文底部对此发表评论来指出,并将相应地对其进行修改。

于 2010-05-24T16:12:28.833 回答