当我将一些子目录从“./configure”所管理的项目中移开时,它会尝试获取某些“../../configure.ac”等内容并且不易构建。< / p>
如何提取部分此类项目并使其独立?
答案 0 :(得分:0)
有两种方法可以解决此问题,创建单独的自动工具构建流程,或者取消自动工具和手动代码,或者制作新的Makefile
。
myprojectfoo | +-- src | +-- man | +-- messages | +-- lib | +-- include | +-- others
请查看上面的插图,了解名为myprojectfoo
的虚构项目,并使用自动工具构建名为foo
的二进制文件。顶级目录即myprojectfoo
将在子目录中包含 configure.ac , Makefile.am 和 Makefile.in 至少 Makefile.am 和 Makefile.in 。自动工具将创建并执行make命令来构建项目。
现在,根据我对你要做的事情的理解:
myprojectfoo | \ / +-- sXc | / \ +-- man | +-- messages | +-- lib | \ / +-- incXude | / \ +-- others
您想要取出src
子目录,它也是include's
。那么在这种情况下,创建一个单独的Makefile( 读取 - no auto-tools )构建会更容易..在这种情况下,这会更容易。
我能想到的最好方法是,你必须最终做出决定, 你想要提取的项目源的子集有多大 ,继续执行此操作后,删除对 Makefile.am , Makefile.in 的所有引用...并借用现有的简单Makefile模板来构建它并像这样调用它
make -f MyMakefile
或强>
如果您想使用自动工具使用该子集构建单独的项目:
Makefile.am
,如下所示。configure.ac
,如下所示...... configure.ac
configure.ac
进行任何后续更改,之后运行 autoreconf ,这将执行 automake , autoconf 和其他支持自动工具程序。为Linux发送Makefile.am
的样本...
SUBDIRS = src include ACLOCAL_AMFLAGS = -I m4
为Linux发送configure.ac
的样本...
AC_PREREQ(2.63) AC_INIT([mysubsetprojectfoo], [0.1a], [foo@bar.baz]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([-Wall -Werror]) AM_GNU_GETTEXT_VERSION([0.17]) AM_GNU_GETTEXT([external]) AM_CFLAGS= # Checks for programs. AC_HEADER_STDC AC_PROG_CC AC_ARG_ENABLE([debug], [ --enable-debug Turn on debugging], [case "${enableval}" in yes) debug=true ;; no) debug=false ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;; esac],[debug=false]) AM_CONDITIONAL([DEBUG], [test x$debug = xtrue]) # Checks for libraries. AC_CHECK_LIB([mylib], [mylib_function], [:]) if test "$mylib" = :; then AC_MSG_ERROR([MyLib is missing.\ This can be downloaded from 'http://www.foo.baz']) fi AC_CONFIG_HEADERS([config.h]) # Checks for header files. # FROM running 'autoscan' on the source directory 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]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE AC_C_CONST AC_TYPE_SIGNAL AC_TYPE_PID_T AC_TYPE_UID_T AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_FORK AC_FUNC_MALLOC AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror]) AC_CONFIG_FILES([Makefile src/Makefile include/Makefile]) AC_OUTPUT
自动工具的命令是我的头脑,我可能已经错过了一些东西......可以通过在这篇帖子的底部发表评论来指出这一点,并会相应地进行修改。