Я столкнулся с интересной проблемой сегодня. Я пытаюсь скомпилировать и связать исполняемый файл теста с платформой модульного тестирования Boost, и я попробовал его двумя различными способами.
- Классический подход прямого соединения с библиотекой boost_unit_test_framework с использованием
-lboost_unit_test_framework
- Современный подход к связыванию CMake с целью
Boost::unit_test_framework
CMake.
Интересно, что когда я напрямую ссылаюсь на библиотеку, мой код компилируется и ссылки нормально работают; однако, когда я связываюсь с целью CMake, мой код не компилируется, даже не доходя до стадии компоновки!
Ошибки, которые я получаю, связаны с заголовочным файлом, который, кажется, больше не может найти. Это говорит о том, что ссылка на Boost::unit_test_framework
как-то перепутана с моим путём включения.
Я знаю, что связывание с целью CMake должно быть более современным и предпочтительным подходом, но если у него могут быть такие неожиданные и необъяснимые побочные эффекты, это кажется хуже, чем просто прямая ссылка на библиотеку ...
Почему при связывании цели CMake файлы заголовков больше не будут найдены? Также какие другие виды вещей могут ссылаться на цель CMake вместо прямой ссылки на библиотечное влияние?
В обоих случаях я использую target_link_libraries
для ссылки на библиотеку наддува. Например
target_link_libraries(mytest_exe
testlib
-lboost_unit_test_framework
)
или
target_link_libraries(mytest_exe
testlib
Boost::unit_test_framework
)