当我将一些子目录从“./configure”管理的项目和所有这些东西中移开时,它会尝试访问一些“../../configure.ac”和其他东西,并且不容易构建。
如何提取此类项目的一部分并使其独立?
有两种方法可以解决这个问题,创建一个单独的自动工具构建过程,或者取消自动工具和手动代码,或者创建一个新的Makefile
.
我的项目富 | +-- 源代码 | +-- 男人 | +-- 消息 | +-- 库 | +-- 包括 | +-- 其他
看一下上面的插图,一个名为的虚构项目myprojectfoo
正在使用自动工具构建一个名为foo
. 顶级目录即myprojectfoo
有configure.ac、Makefile.am和Makefile.in,在子目录中至少有Makefile.am和Makefile.in。自动工具将创建并执行 make 命令来构建项目。
现在,根据我对您正在尝试做的事情的理解:
我的项目富 | \ / +-- sXc | / \ +-- 男人 | +-- 消息 | +-- 库 | \ / +-- 包括徐德 | / \ +-- 其他
你想取出src
子目录,它include's
也是。然后在这种情况下,创建一个单独的 Makefile(读取-没有自动工具)构建会更容易。在这种情况下,它会更容易。
我能想到的最好方法是,您最终必须做出决定,您要提取的项目源的子集有多大,一旦您继续这样做,请删除对Makefile.am和Makefile 的所有引用。在... 并借用现有的简单 Makefile 模板来构建它并像这样调用它
make -f 我的Makefile
或者
如果您想使用自动工具使用该子集构建一个单独的项目:
Makefile.am
,如下所示。configure.ac
,如下所示...configure.ac
configure.ac
,然后运行autoreconf,这将执行automake、autoconf和其他支持自动工具程序。以Makefile.am
Linux 为例...
SUBDIRS = src 包括 ACLOCAL_AMFLAGS = -I m4
以configure.ac
Linux 为例...
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
自动工具的命令,是我的头等大事,我可能错过了一些东西..随时通过在本文底部对此发表评论来指出,并将相应地对其进行修改。