我正在为GCCinit_priority
和MSCinit_seg
进行测试。我想制作一个测试来按照特定的顺序编译和链接两个源文件。
我在查找有关使用AC_COMPILE_IFELSE
或AC_LINK_IFELSE
编译和链接两个源文件的信息时遇到问题。Autoconf文档似乎没有讨论这个用例。搜索"Autoconf test with two source files">之类的术语会返回不相关的结果。我想我可能错过了好的搜索词。
在Autoconf测试期间是否可以使用两个源文件?如果是,那么我该怎么做呢?
AC_COMPILE_IFELSE
和AC_LINK_IFELSE
不符合您所描述的目的,它们也不打算这样做。每个都获取一个源,执行其测试,然后自行清理。我甚至没有在Autoconf档案中找到你想要的宏,它提供了许多有时有用的宏,而这些宏是Autoconf本身没有的。你打算做的事情远非寻常,所以如果你想继续下去,我认为你需要自己做。参考AC_COMPILE_IFELSE
和AC_LINK_IFELSE
的实现可能会有所帮助。
但一定要先坐下来思考,因为我认为这样的测试无论如何都没有意义。在不使用诸如init_priority
或init_seg
之类的扩展的情况下,跨翻译单元的C++相对初始化顺序是完全未指定的。该语言没有为它与对象在链接器命令行上出现的顺序有关的假设提供任何理由,甚至也没有为不同TU产生的初始化不会混合的假设提供理由。因此,即使跨TU初始化的测试碰巧通过,也不会传达任何可操作的信息,因为没有任何基础可以确定你试图测试的任何特性都是成功的原因。
我考虑通过init_priority
对TU内初始化重新排序进行测试,您可以使用AC_RUN_IFELSE
执行该测试。然而,这对您也没有用处,因为您显然需要支持MSVC++,它不提供以该粒度调整初始化顺序的机制。
最终,我认为你能做的最好的事情就是测试init_priority
或init_seg
是否被编译器接受(你可以用AC_COMPILE_IFELSE
来做(,并假设如果是这样,它实际上完成了它应该做的工作。