#c #ruby #unit-testing #gcc #mqueue
#c #ruby #модульное тестирование #gcc #mqueue
Вопрос:
Я пишу модульные тесты для проекта на C, используя комбинацию Ceedling / Unity / CMock коммутатора в качестве среды модульного тестирования.
Я столкнулся с интересной дилеммой, которую я использую mqueue.h
в одном из своих модульных тестов. Когда тесты компилируются, я получаю неопределенные ссылочные ошибки компоновщика gcc для mq_open()
mq_close()
, и т.д..
Насколько я понимаю, исходя из этого, флаг -lrt должен указываться в конце команды gcc — после перечисления источников (и исполняемых файлов?) gcc test_foo.c -lrt
. К сожалению, ceedling написан для установки флага сразу после команды: gcc -lrt test_foo.c
, и я не могу найти способ изменить порядок.
Документация, поставляемая с Ceedling, описывает только то, как добавлять флаги в команду gcc, а не как изменять порядок. Я пытался покопаться в обширном исходном коде Ceedling, но он написан на Ruby, с которым я не знаком.
Итак, мои вопросы:
- Действительно ли размещение -lrt влияет на связывание mq_*()
- Есть мысли о том, как изменить размещение флага -lrt?
Ответ №1:
Почти 3 года спустя возникла аналогичная проблема. Они добавили эту функцию в https://github.com/ThrowTheSwitch/Ceedling/issues/136 , но использование по-прежнему нелегко понять из документации. Мне нужно было включить математическую библиотеку (требуется флаг ‘-lm’ в конце команды) и в итоге получился следующий раздел конфигурации (особенно системная часть):
:libraries:
:placement: :end
:flag: "${1} " # or "-L ${1}" for example
:common: amp;common_libraries []
:system:
- -lm
:test:
- *common_libraries
:release:
- *common_libraries
По какой-то причине ceedling вообще не добавлял флаги при добавлении в commons или отдельные разделы сборки.