configure.ac范例二

本文介绍了如何在configure.ac和Makefile.am中利用宏AM_CONDITIONAL和AC_SUBST来根据条件定义变量并控制编译过程。AM_CONDITIONAL允许根据条件定义环境变量,影响编译部分源代码。而AC_SUBST则用于将shell变量输出到Makefile中,使得在Makefile.am中可以引用这些变量,如LIBZMQ_EXTRA_LDFLAGS,以传递编译选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量在configure.ac,makefile.am,makefile,config.h中怎么传递。
比如你如何更具configure的参数让一部分源代码加入到编译,或者根据不同的cpu或者平台决定哪些代码需要编译哪些不编译。
AM_CONDITIONAL (conditional, condition)
首先开头不是AC而是AM它是一个automake宏。在configure.ac中使用,如果条件满足就定义变量。
例如:

AM_CONDITIONAL(BUILD_TIPC, test "x$libzmq_tipc_support" = "xyes")

这条在configure.ac中的语句表示,如果条件测试通过,就在Makefile.am的环境中定义变量BUILD_TPIC。你可以在Makefile.am中这么使用这个变量。

if BUILD_TIPC
test_apps += \
    test_connect_delay_tipc \
    test_pair_tipc \
    test_reqrep_device_tipc \
    test_reqrep_tipc \
    test_router_mandatory_tipc \
    test_shutdown_stress_tipc \
    test_sub_forward_tipc \
    test_term_endpoint_tipc

表示如果BUILD_TIPC存在就增加附件的编译列表。

AC_SUBST (variable, [value])
将shell变量输出到输出文件中,例如:

LTVER="5:0:0"
AC_SUBST(LTVER)

这将变量LTVER输出到Makefile中。同时Makefile.am中可以使用@LTVER@来引用这个变量。
比如你可以用这个功能为编译提供编译选项。
例如:

LIBZMQ_EXTRA_LDFLAGS="-I${norm_path}/include ${LIBZMQ_EXTRA_LDFLAGS}"
AC_SUBST(LIBZMQ_EXTRA_LDFLAGS)
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")

这里使用AC_SUBST输出一个变量LIBZMQ_EXTRA_LDFLAGS,该变量在Makefile.am中传递给编译器。在Makefile.am中使用

if ON_ANDROID
libzmq_la_LDFLAGS = \
    -avoid-version \
    -version-info @LTVER@ \
    @LIBZMQ_EXTRA_LDFLAGS@

使用@LIBZMQ_EXTRA_LDFLAGS@进行引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值