代码之家  ›  专栏  ›  技术社区  ›  Vi.

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

  •  0
  • Vi.  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   t0mm13b    15 年前

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

    myprojectfoo
       |
       +-- src
       |
       +-- man
       |
       +-- messages
       |
       +-- lib
       |
       +-- include
       |
       +-- others
    

    请看上面的插图,这是一个虚构的项目,名为 myprojectfoo foo . 顶级目录,即。 会有 , 生成文件.am 生成文件.in 生成文件.am . 自动工具将创建并执行make命令来构建项目。

    现在,根据我对你的理解:

    myprojectfoo
       |   \ /
       +-- sXc
       |   / \
       +-- man
       |
       +-- messages
       |
       +-- lib
       |     \ /
       +-- incXude
       |     / \
       +-- others
    

    你想把枪拿出来吗 src include's 也。在这种情况下,创建一个单独的Makefile会更容易( 阅读 无自动工具 )构建。。那样的话,就容易多了。

    我能想到的最好办法是,你最终必须做出决定, 您要提取的项目源的子集有多大 生成文件.am , 生成文件.in ... 借用一个现有的简单Makefile模板来构建它并像这样调用它

    make -f MyMakefile
    

    1. 创建骨骼 Makefile.am 如下所示。
    2. 创建骨骼 configure.ac 如下所示。。。
    3. 自动扫描 配置.ac
    4. 汽车制造商 (做一次!)
    5. 自动匹配 那么。它可能会抱怨缺少文件,如安装、复制等
    6. 随后对 配置.ac ,运行 自动恢复 在那之后,哪个会执行 , 自动匹配 ,以及其他支持的自动工具程序。

    生成文件.am

    SUBDIRS = src include
    ACLOCAL_AMFLAGS = -I m4
    

    采集样本 配置.ac 对于Linux。。。

    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