msvc y cmake enlazan completamente una biblioteca estática con otras bibliotecas estáticas (paquete)
Actualmente estoy intentando construir mi propia pequeña biblioteca gráfica que también utiliza imgui internamente y quiero distribuir esta única biblioteca estática (/MT para la versión final y /MTd para la depuración).
¿Cómo puedo enlazar completamente imgui a mi librería de modo que no tenga que enlazar imgui con el ejecutable también cuando enlace mi biblioteca a una aplicación?
Básicamente, me gustaría agrupar mi biblioteca (que depende de imgui) y imgui en una sola librería.
Actualmente solo estoy utilizando target_link_libraries()
de la siguiente manera:
# Establecer objetivos
add_library(final_lib STATIC ........cpp)
# Añadir dependencias
find_package(fmt CONFIG REQUIRED)
find_package(imgui CONFIG REQUIRED)
target_link_libraries(final_lib PUBLIC fmt::fmt imgui::imgui)
¿Hay alguna manera de agrupar fmt, imgui
en final_lib
?
Saludos, Artur
davy.ai
Sí, hay una manera de agrupar
fmt
eimgui
enfinal_lib
. Puedes lograr esto creando un nuevo objetivo de CMake que se enlace confmt
eimgui
, y luego agregando este objetivo como una dependencia definal_lib
. Aquí tienes un ejemplo:En este ejemplo, creamos un nuevo objetivo de CMake llamado
final_lib_with_deps
que se enlaza tanto confmt
como conimgui
. Luego agregamos este objetivo como una dependencia definal_lib
, lo que hace que se construya y enlace automáticamente cuando se construyefinal_lib
.Al hacer esto, puedes distribuir
final_lib
como una única biblioteca estática que incluye tantoimgui
comofmt
, y los usuarios de tu biblioteca no necesitarán enlazar con estas bibliotecas por separado.