代码之家  ›  专栏  ›  技术社区  ›  jww avp

在Autoconf测试中编译多个源文件

  •  3
  • jww avp  · 技术社区  · 6 年前

    我在做海合会的测试 init_priority 和理科硕士 init_seg . 我想设计一个测试来按特定顺序编译和链接两个源文件。

    我很难找到有关使用 AC_COMPILE_IFELSE AC_LINK_IFELSE . Autoconf文档似乎没有讨论用例。搜索诸如 “使用两个源文件的Autoconf测试” 正在返回不相关的结果。我想我可能错过了好的搜索条件。

    在Autoconf测试期间是否可以使用两个源文件?如果是,那我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  3
  •   John Bollinger    6 年前

    AC_COMPILE_IFELSE AC_LINK_IFELSE 不要为你描述的目的服务,他们也不打算这样做。每次服用 源,执行其测试,并在其自身之后进行清理。我甚至没有找到你想要的宏 the Autoconf archive ,它提供了一些有时有用的宏,这些宏不随Autoconf本身一起提供。你的提议太不寻常了,所以如果你想继续下去,我想你需要自己动手了。它可能有助于参考 编译 交流链路 .

    但是,一定要坐下来先想一想,因为我认为这样的测试无论如何都没有意义。完全不指定跨翻译单元的C++相对初始化顺序,而不使用扩展,例如 init_priority init_seg . 该语言没有提供任何理由来假设它与对象在链接器命令行上的显示顺序有关,甚至也没有提供假设,即来自不同tu的初始化不会混合在一起。因此,即使cross-TU初始化测试碰巧通过,也不会传递任何可操作的信息,因为没有任何依据可以确定,您试图测试的任何特性都是成功的原因。

    我曾考虑过建议对in-TU初始化重新排序通过 初始优先级 ,你可以用它来表演 AC_RUN_IFELSE . 然而,这对您也没有用,因为您显然需要支持C++,它没有提供一种机制来调节这种粒度下的初始化顺序。

    最后,我认为你能做的就是测试 初始优先级 初始段 被接受 完全 由编译器(您可以使用 编译 ),假设是这样,它实际上完成了它应该做的工作。