no hay problemas cuando su biblioteca es una parte del proyecto o estás importarlo utilizando el modo de configuración de find_package
de comandos (ver documentation y example). En caso de que no se puede modificar la tercera parte lo que producirá <package>Config.cmake
(que cmake herramienta no podrá utilizar o no querer hacerlo) la respuesta es emular dicho proceso:
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)
nota que a diferencia de "depuración" "optimizado" característica de estos enfoques/no se limita a configuraciones de depuración/de la versión:
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_MINSIZEREL "/path/to/foo-small.lib")
también tienes un poco de golosinas como 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
y transitiva vinculación:
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
Por supuesto se pueden utilizar comandos regulares cmake como find_library
y find_package(... MODULE)
para estimar ubicaciones en lugar de codificar ellos.
Siempre estoy buscando soluciones en módulos prefabricados. Por ejemplo: en FindQt4.cmake. – Naszta
cómo funcionará esto si tengo varias bibliotecas de depuración y liberación. Por ejemplo, tengo _Foo1_d _, _ Foo2_d_ & _Foo1 _, _ Foo2_. ¿Cómo puedo agruparlos en una sola variable? Actualmente solo puede detectar las palabras clave para la primera lib asociada (depuración o versión) y no reconoce para la siguiente – user1036908