CMake условное связывание библиотеки в зависимости от платформы - PullRequest
1 голос
/ 14 апреля 2019

Я связываю Boost с моим приложением, используя CMake:

У меня есть этот код, который работает на Linux в моем CMakeLists.txt: TARGET_LINK_LIBRARIES(app -lboost_system -lboost_thread -lcrypt)

Но на OpenBSD -lboost_thread есть *Вместо 1008 * и -lcrypt не требуется.Есть ли способ записи CMakeLists.txt таким образом, чтобы он обрабатывал оба этих случая в зависимости от того, какая библиотека существует?

1 Ответ

2 голосов
/ 14 апреля 2019

Необходимость обработки таких различий, характерных для данной платформы, заключается в том, что вместо этого следует использовать модули поиска. В частности, FindBoost в этом случае. После выполнения find_package вы сможете извлечь библиотеку потоков по ее каноническому целевому имени Boost::thread.

Любые необходимые библиотеки или заголовки PUBLIC будут частью интерфейса ссылок канонической цели и будут добавляться автоматически, без каких-либо дополнительных усилий с вашей стороны. Все, что вам нужно сделать, это добавить каноническую цель как зависимость ссылки

target_link_libraries(app Boost::thread)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...