Build 如何基于GNU构建系统提取部分项目?
当我将某个子目录从“../configure”和所有这些东西管理的项目中移开时,它会尝试访问“../../configure.ac”和其他一些东西,这是不容易构建的Build 如何基于GNU构建系统提取部分项目?,build,autotools,configure,Build,Autotools,Configure,当我将某个子目录从“../configure”和所有这些东西管理的项目中移开时,它会尝试访问“../../configure.ac”和其他一些东西,这是不容易构建的 如何提取此类项目的一部分并使其独立?有两种方法可以解决此问题,创建一个单独的自动工具构建过程,或者删除自动工具和手工代码,或者创建一个新的Makefile myprojectfoo | +-- src | +-- man | +-- messages | +-- lib |
如何提取此类项目的一部分并使其独立?有两种方法可以解决此问题,创建一个单独的自动工具构建过程,或者删除自动工具和手工代码,或者创建一个新的
Makefile
myprojectfoo
|
+-- src
|
+-- man
|
+-- messages
|
+-- lib
|
+-- include
|
+-- others
您想取出src
子目录,它也是include的
。然后在这种情况下,创建一个单独的Makefile(读取-无自动工具)构建会更容易。。那样的话,就容易多了
我能想到的最好的办法是,你最终必须做出决定,你要提取的项目源子集有多大,一旦你继续,删除对Makefile.am,Makefile.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