Связывание разных библиотек для отладки и выпуска сборок в Cmake на окнах?
Итак, у меня есть библиотека, которую я компилирую, и мне нужно связать разные сторонние вещи в зависимости от того, является ли это отладкой или версией сборки (в частности, версиями релизов или отладки этих библиотек). Есть ли простой способ сделать это в Cmake?
Изменить: я должен отметить, что я использую визуальную студию
Ответы
Ответ 1
В соответствии с Документация CMake:
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
"отладка", "оптимизированная" или "общая", ключевое слово указывает, что библиотека сразу после его использования только для соответствующей сборки конфигурации.
Итак, вы должны это сделать:
add_executable( MyEXE ${SOURCES})
target_link_libraries( MyEXE debug 3PDebugLib)
target_link_libraries( MyEXE optimized 3PReleaseLib)
Ответ 2
Как-то ответ от @Mike Willekes получил связь CMake в одной и той же целевой и выпуске и debug для меня: (
Я получил эту работу, установив обе конфигурации в одной строке, как это было предложено в @sakra в соответствующем вопросе, - и делал это для каждой библиотеки, которая должна была быть связаны между собой:
target_link_libraries ( app
debug ${Boost_FILESYSTEM_LIBRARY_DEBUG}
optimized ${Boost_FILESYSTEM_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_LOG_LIBRARY_DEBUG}
optimized ${Boost_LOG_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG}
optimized ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE} )
# ...
Ответ 3
Я хотел бы добавить несколько примечаний к предыдущим ответам.
Если вам нужно создать список из нескольких файлов, которые вы хотите связать, и сохранить их в переменной кэша, то вам нужно добавить optimized
или debug
указанный перед каждой библиотекой. Это может быть особенно полезно для больших make файлов/проектов.
Так, например, вы можете сделать что-то вроде этого:
set( MyFavLib_LIBRARIES
debug debug/module1.lib optimized release/module1.lib
debug debug/module2.lib optimized release/module2.lib )
target_link_libraries( app ${MyFavLib_LIBRARIES} )