变量在configure.ac,makefile.am,makefile,config.h中的传递

1、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存在就增加附件的编译列表。

2、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@进行引用。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
非常抱歉,我混淆了configure.acMakefile.am文件。下面是正确的步骤: 1. 在主项目的configure.ac文件,使用AC_CONFIG_SUBDIRS指定需要包含的子项目目录,例如: ``` AC_CONFIG_SUBDIRS([subdir1 subdir2 subdir3]) ``` 2. 在每个子项目的configure.ac文件,必须使用AC_CONFIG_AUX_DIR来指定子项目config.sub和config.guess文件的位置,例如: ``` AC_CONFIG_AUX_DIR([.]) ``` 3. 在每个子项目的Makefile.am文件,使用ACLOCAL_AMFLAGS变量来指定包含的定义文件的位置,例如: ``` ACLOCAL_AMFLAGS = -I m4 ``` 其,m4是包含定义文件的目录。 4. 在每个子项目的Makefile.am文件,使用AUTOMAKE_OPTIONS变量指定需要使用外部子目录功能,例如: ``` AUTOMAKE_OPTIONS = subdir-objects ``` 5. 在每个子项目的Makefile.am文件,定义生成的库文件和头文件,并使用INCLUDES变量指定需要包含的头文件路径,例如: ``` lib_LTLIBRARIES = libsubdir1.la libsubdir1_la_SOURCES = subdir1.c subdir1.h INCLUDES = -I$(top_srcdir)/subdir1 ``` 其,lib_LTLIBRARIES变量指定生成的库文件名,libsubdir1_la_SOURCES变量指定生成库文件所需的源文件和头文件,INCLUDES变量指定需要包含的头文件路径。 6. 最后,在主项目的Makefile.am文件,使用SUBDIRS变量指定包含的子目录,例如: ``` SUBDIRS = subdir1 subdir2 subdir3 ``` 这样,在主项目的configure脚本执行时,会自动进入每个子项目的目录执行其对应的configure脚本,然后生成各自的Makefile文件。同时,每个子项目的库和头文件也会被自动编译和链接到主项目。 使用外部子目录功能可以自动化生成子项目的Makefile文件,避免了手动执行子项目的configure脚本的步骤。同时,也可以更灵活地控制子项目的编译和链接过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值