• 难题autoconf、automake、libtool


     1、./configure 脚本生成 自定义宏(Defining C Preprocessor Symbols):
         在 configure.in,通过 AC_DEFINE([STUDY],[yes],[define test]) 定义。 这个例子中定义个 STUDY的宏,值为 yes。执行 autoreconf ,然后configure后,输入的config.h中,基本就是下面的样子:
    /* define test */
    #define STUDY yes

         重点: gnu风格的程序,通过 configure & make 编译程序。configure分析系统环境,并保存结果,供源代码使用。AC_DEFINE 是保存结果的方式之一。

    2、./configure 使用 --with-package功能: 
         AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given]) 有4个参数,参考官方说明,比较容易理解。但是有点小麻烦,如--with-package=ABC,如果获取 '='后面的值,成为一个问题。看官方例子:

    AC_ARG_WITH([readline],
        [AS_HELP_STRING([
    --with-readline],
            [support fancy command line editing @
    <:@default=check@:>@])],
        []
    ,
        [with_readline
    =check])

    LIBREADLINE
    =
    AS_IF([test 
    "x$with_readline" != xno],
        [AC_CHECK_LIB([
    readline], [main],
        [AC_SUBST([LIBREADLINE]
    , ["-lreadline -lncurses"])
            AC_DEFINE([HAVE_LIBREADLINE]
    , [1],
                 [Define 
    if you have libreadline])
        ]
    ,
        [
    if test "x$with_readline" != xcheck; then
            AC_MSG_FAILURE(
                [
    --with-readline was given, but test for readline failed])
        fi
        ]
    , -lncurses)])

         其中 with_readline=check  和 [test "x$with_readline" != xno] 两行说明,可以通过 $with_<pakcage> shell变量,来获取命令行中的值(= 后面的部分)。经过实践:
                   如果没有指定 --with-<package>,则 $with_<package>为空,
                   如果指定 --without-<package>,则 $with_<package>为no
                   如果指定 --with-<package>,则 $with_<package>为yes,
                   如果指定 --with-<package>=ABC,则 $with_<package>为'ABC',
        重点: 如何通过命令行,对源代码配置进行适当的配置,$with_<package> 之类的参数提供一种沟通方式,让编译者控制源代码的生成。当然这个也需要用到 AC_DEFINE之类的命令。

  • 相关阅读:
    隔行变色&&鼠标移入变色
    滚动之固定顶部
    页面滚动之回到顶部
    定时器之秒表
    定时器之小僵尸的移动
    tomcat+spring+https
    域名相关
    【软件创意】智能Goals (android)
    【神一样的作业】二维数组连续的二维子数组的和(元素可以连续)
    【软件工程】敏捷开发方法的总结
  • 原文地址:https://www.cnblogs.com/thh/p/1523181.html
Copyright © 2020-2023  润新知