Компиляция нескольких исходных файлов в тесте Autoconf

Я работаю над тестом для GCC init_priority и MSC init_seg, Я хочу создать тест для компиляции и связывания двух исходных файлов в определенном порядке.

У меня проблемы с поиском информации о компиляции и связывании двух исходных файлов с использованием AC_COMPILE_IFELSE или же AC_LINK_IFELSE, Документы Autoconf не обсуждают сценарий использования. Поиск таких терминов, как "Проверка Autoconf с двумя исходными файлами", приводит к неуместным результатам. Я думаю, что я мог пропустить хорошие условия поиска.

Можно ли использовать два исходных файла во время теста Autoconf? Если так, то как мне это сделать?

1 ответ

Решение

AC_COMPILE_IFELSE а также AC_LINK_IFELSE не служат цели, которую вы описываете, и они не предназначены для этого. Каждый берет один источник, выполняет свой тест и убирает за собой. Я даже не нашел макрос для того, что вы хотите, в архиве Autoconf, который предоставляет ряд иногда полезных макросов, которые не поставляются вместе с Autoconf. То, что вы предлагаете сделать, далеко от обычного, поэтому, если вы хотите продолжить, то я думаю, что вам нужно свернуть свое собственное. Возможно, это поможет проконсультироваться с реализацией AC_COMPILE_IFELSE а также AC_LINK_IFELSE,

Но сначала расслабьтесь и подумайте, потому что я не думаю, что такой тест был бы в любом случае значимым. Относительный порядок инициализации C++ в единицах перевода полностью не определен без использования расширения, такого как init_priority или же init_seg, Этот язык не дает оправдания для предположения, что он имеет какое-либо отношение к порядку, в котором объекты появляются в командной строке компоновщика, и даже для предположения, что инициализации, возникающие из разных TU, не будут смешаны. Таким образом, даже если тест на инициализацию между TU проходит успешно, он не передает никакой полезной информации, потому что нет никаких оснований для уверенности в том, что любая характеристика, которую вы пытаетесь проверить, отвечает за успех.

Я подумал о том, чтобы предложить просто тест для переупорядочения инициализации в TU через init_priority, который вы могли бы выполнить с AC_RUN_IFELSE, Однако это также бесполезно для вас, потому что вам, очевидно, необходимо поддерживать MSVC++, который не обеспечивает механизм для модуляции порядка инициализации при такой степени детализации.

В конечном счете, я думаю, что лучшее, что вы можете сделать, это проверить, init_priority или же init_seg принимается компилятором вообще (что вы можете сделать с AC_COMPILE_IFELSE) и предположим, что если это так, то он фактически выполняет работу, которую должен делать.

Другие вопросы по тегам