【问题标题】:Is there a way to check for compile flags that doesn't require the autoconf-archive package?有没有办法检查不需要 autoconf-archive 包的编译标志?
【发布时间】:2021-11-29 20:52:21
【问题描述】:

AX_CHECK_COMPILE_FLAG 宏在 autoconf-archive 包中的大多数发行版中都可用,但不幸的是,如果缺少该包,则无法理解错误:

./configure: 5358: Syntax error: word unexpected (expecting ")")

这是导致错误的 configure.ac 行:

AX_CHECK_COMPILE_FLAG(-fcx-fortran-rules, CFLAGS="$CFLAGS -fcx-fortran-rules")

有没有办法在不使用 AX_ 检查的情况下检查编译标志是否有效?

我是否应该将此 AX_ 支票复制粘贴到我的 configure.ac 中?这看起来有点像 hack,但它会起作用...有更好的方法吗?

【问题讨论】:

    标签: gcc configure autoconf automake m4


    【解决方案1】:

    首先,在使用非标准宏时,谨慎的做法是在configure.ac 中添加一行,这将检查生成的configure 文件是否不包含宏的名称(只有它的扩展名不应该包含在内)包含宏名称):

    m4_pattern_forbid([AX_CHECK_COMPILE_FLAG])dnl
    

    这将使autoreconf 失败并产生一个中途的错误消息,而不是在找不到AX_CHECK_COMPILE_FLAG 宏定义时从configure.ac 静默生成一个无效的configure

    然后您可以将包含AX_CHECK_COMPILE_FLAG 定义的*.m4 文件复制到项目的源代码树中(例如,复制到m4/ 子目录中),然后在顶层Makefile.am 中添加一行,告诉@987654332 @ 在哪里查找宏定义:

    ACLOCAL_AMFLAGS = -I m4
    

    除此之外,您需要将m4/whatever-the-name-is.m4 文件添加到某些Makefile.am 或Makefile 包含文件中的EXTRA_DIST,以便可以在解压缩的dist tarball 上运行autoreconf

    我个人更喜欢在configure.ac 中使用AC_CONFIG_MACRO_DIR([auto-m4]),在顶级Makefile.am 中使用ACLOCAL_AMFLAGS = -I auto-m4 -I project-m4 将不同来源的*.m4 文件分隔到我的源代码树中的不同目录中(auto-m4/ 用于@ 987654344@ 文件在autoreconf 运行期间复制到那里,project-m4/ 用于我自己为项目编写的*.m4 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 2020-05-25
      • 2014-02-08
      • 2010-09-22
      相关资源
      最近更新 更多