2015-06-26 2 views
1

Я работаю над проектом с использованием системы сборки cmake. По умолчанию у CMake есть хорошая структура для генерации одного исполняемого файла из набора кода C/C++. Функция cmake называется create_test_sourcelist. То, что он делает, это сгенерировать диспетчер C/C++ с одной главной точкой входа, которая вызовет другой код C/C++.Boost.Tests: укажите имя функции вместо основного

Поэтому у меня есть куча файлов C/C++ с сигнатурой функции, такой как: int TestFunctionality1(int argc, char *argv[]), которую я хотел бы сохранить как есть, если, конечно, это не означает еще большую работу.

Как я могу сохранить эту систему на месте и начать использовать BOOST_CHECK? Я не мог понять, как указать фактическую главную точку входа не называется int main(int argc, char *argv[]).

У меня есть основа для интеграции с Дженкинсом, так как проект уже использует Boost, я считаю, что это должно быть выполнимо без повторной записи существующего набора тестов CMake и смены всех тестов на независимую функцию main.

+0

проверьте это для вдохновения: https://github.com/mutanabbi/chewy-cmake-rep/blob/master/AddBoostTests.cmake – zaufi

+0

AddBoostTests.cmake требует использования отдельной функции 'main()', в то время как я нужно использовать 'create_test_sourcelist' – malat

ответ

1

К сожалению, кажется, что нет простого и чистого способа сделать это.

С одной стороны единственная полезная функция create_test_sourcelist заключается в создании тестовый драйвер: а ( глупо довольно просто, наивно и с отсутствием способностей к взламывают/продлить) C/C++ модуль перевода на основе ${cmake-prefix}/share/cmake/Templates/TestDriver.cxx.in (и нет способа выбрать какой-либо другой шаблон).

С другой стороны, подталкивания UTF предлагает свой собственный test runner (что равно тест драйвера в терминологии CMake), но в любом варианте (статические, динамические, одного заголовка) содержит определение для main() так или иначе (даже в случае external test runner).

... так что вы в итоге получаете две функции main() и не имеете возможности выбрать ни одного.

Копаем немного в источники create_test_sourcelist Я действительно удивляюсь, почему они реализованы как команда, а не как порядковый (внешний) модуль cmake - он не делает никаких специальных (которые не могут быть реализованы с использованием CMake язык). Эта команда действительно глупа - она ​​не проверяет, что требуемые функции действительно существуют (вы получите ошибки компиляции, если это не так). Нет никаких путей для гибкой настройки исходного файла вывода. Все, что есть, это удаление путей и расширений из списка исходных файлов и их замена на упомянутый шаблон с использованием порядкового номера configure_file() ...

Итак, лично я не вижу причин использовать его вообще. Именно поэтому я сделал то же самое (но лучше;) в модуле, упомянутом в комментарии выше.

Если вы все еще хотите использовать эту команду, сгенерированный тестовый драйвер совершенно бесполезен, если вы хотите использовать Boost UTF. В любом случае вам необходимо предоставить свой собственный initialization function (и это не main()), где вы можете вручную зарегистрировать свои тестовые примеры в мастер-наборе тестов (или организовать свои тесты на более сложное дерево). В этом случае нет абсолютно никаких оснований для использования create_test_sourcelist! Все, что вы можете получить от него, - это список источников, которые должны быть предоставлены add_executable() ... но это намного проще сделать w/set() ... Эта команда даже не может помочь вам с списком тестовых функций (список имен файлов без наложения) для вызова (он используется внутренне и не экспортируется). Вы все еще хотите использовать эту команду?

+0

Вы должны внести свой модуль повышения непосредственно в основные модули cmake, спасибо! – malat

Смежные вопросы