Build 如何基于GNU构建系统提取部分项目?

Build 如何基于GNU构建系统提取部分项目?,build,autotools,configure,Build,Autotools,Configure,当我将某个子目录从“../configure”和所有这些东西管理的项目中移开时,它会尝试访问“../../configure.ac”和其他一些东西,这是不容易构建的 如何提取此类项目的一部分并使其独立?有两种方法可以解决此问题,创建一个单独的自动工具构建过程,或者删除自动工具和手工代码,或者创建一个新的Makefile myprojectfoo | +-- src | +-- man | +-- messages | +-- lib |

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


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

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

myprojectfoo | +-- src | +-- man | +-- messages | +-- lib | +-- include | +-- others 您想取出
src
子目录,它也是
include的
。然后在这种情况下,创建一个单独的Makefile(读取-无自动工具)构建会更容易。。那样的话,就容易多了

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

make -f MyMakefile 以Linux的
configure.ac
为例

SUBDIRS = src include ACLOCAL_AMFLAGS = -I m4 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 空调预需求(2.63) AC_INIT([mysubsetprojectfoo],[0.1a][foo@bar.baz]) AC_配置_辅助_目录([构建辅助]) 我是一家汽车制造商([-Wall-Werror]) AM_GNU_GETTEXT_版本([0.17]) AM_GNU_GETTEXT([外部]) 上午10点= #检查程序。 AC_收割台\u STDC AC_PROG_CC AC_参数_启用([调试], [--启用调试打开调试], [中的大小写“${enableval}” 是)debug=true;; 否)调试=false;; *)AC_MSG_错误(--enable debug的[bad value${enableval}]);; esac],[debug=false]) AM_条件([DEBUG],[test x$DEBUG=xtrue]) #检查图书馆。 AC_CHECK_LIB([mylib],[mylib_函数],:]) 如果测试“$mylib”=:;然后 AC_MSG_错误([MyLib缺失)\ 可从以下网址下载:http://www.foo.baz']) fi AC_配置_头([CONFIG.h]) #检查头文件。 #在源目录上运行“自动扫描” AC_CHECK_头([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]) #检查typedef、结构和编译器特征。 AC_C_内联 交流电常数 AC_类型_信号 空调类型PID 空调类型 空调类型和尺寸 #检查库函数。 AC_FUNC_叉子 AC_FUNC_MALLOC AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror]) AC_配置_文件([Makefile src/Makefile include/Makefile]) 交流输出
自动工具的命令是我脑子里最重要的,我可能遗漏了一些东西。请随意指出,在这篇文章的底部放一条评论,它将被相应地修改。

太复杂了。。。我只是复制了整个项目,并从“/configure”脚本中删除了部分内容,该脚本抱怨缺少内容。我想从这个大东西中提取一个小的补充程序。它还有额外的不必要的依赖项。我认为可能有一种方法可以分析生成文件(由于autotools而如此庞大),并找到用于构建给定目标的源文件子集。与其直接运行automake和autoconf(忘记运行aclocal、autoheader、libtoolize等),不如直接运行autoreconf更容易。这将以正确的顺序调用所有必需的自动工具。/*看起来我需要更多关于自动工具的知识,以便对这些项目进行非琐碎的更改。*/在我的大脑中,“自动工具”和“过度复合化”在一个架子上。 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