Нет проблем, когда ваша библиотека является частью проекта или вы
импортировать его, используя режим конфигурации команды find_package
(см. документация и пример ).
Если вы не можете изменить третье лицо, оно выдаст <package>Config.cmake
(он может не использовать инструмент cmake или вы не хотите это делать) ответ - подражать
такой процесс:
add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
target_link_libraries(MyEXE foo)
обратите внимание, что в отличие от функции "отладка" / "оптимизированная", такой подход не ограничивается конфигами отладки / выпуска:
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_MINSIZEREL "/path/to/foo-small.lib")
также у вас есть некоторые вкусности, такие как INTERFACE_INCLUDE_DIRECTORIES :
set_target_properties(foo PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "/path/to/foo/includes")
include_directories("/path/to/foo/includes") # this line not needed
target_link_libraries(MyEXE foo) # this command will add "/path/to/foo/includes" for you
и транзитивная связь:
add_library(boo STATIC IMPORTED)
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/boo-d.lib")
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/boo.lib")
add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
set_target_properties(foo PROPERTIES INTERFACE_LINK_LIBRARIES boo) # foo depends on boo
target_link_libraries(MyEXE foo) # boo will be linked automatically
Конечно, вы можете использовать обычные команды cmake, такие как find_library
и find_package(... MODULE)
, чтобы оценивать местоположения вместо жесткого их кодирования.