Подтвердить что ты не робот

Связывание разных библиотек для отладки и выпуска сборок в Cmake на окнах?

Итак, у меня есть библиотека, которую я компилирую, и мне нужно связать разные сторонние вещи в зависимости от того, является ли это отладкой или версией сборки (в частности, версиями релизов или отладки этих библиотек). Есть ли простой способ сделать это в Cmake?

Изменить: я должен отметить, что я использую визуальную студию

4b9b3361

Ответ 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} )