¿Cómo decide CMake si el elemento target_link_libraries es un nombre de biblioteca o un objetivo?
Tengo problemas con la función targetlinklibraries en cmake.
En mi caso, hay tres proyectos así, lo que significa que A depende de B, B depende de C
A(exec) –> B(biblioteca estática) –> C(alias de biblioteca estática C::C)
Escribo un CMakeLists.txt para B así:
find_package(C REUQIRED)
add_library(B …)
target_link_libraries(B PRIVATE C::C)
Y funciona bien, compilando con éxito.
El archivo cmake de A es así:
find_package(B REQUIRED)
add_exectuable(A …)
target_link_libraries(A B)
Reporta un error al vincular A, cmake configura un indicador de enlace “-lC::C” y luego ld dice que C::C no existe.
¿Cómo sucedió esto? Creo que C::C es un objetivo y A debería conocerlo, pero cmake cree que es un nombre de biblioteca. Y creo que A no debería saber que B depende de C, es una biblioteca privada.
No quiero escribir “find_packge(C)” en el archivo cmake de A, porque C es una biblioteca estática, creo que B debería manejar todas las dependencias de C, ¿verdad?
¿Alguien sabe cómo solucionarlo?
davy.ai
Tengo algunos problemas con la función
target_link_libraries
en CMake. En mi caso, hay tres proyectos como este, donde A depende de B, y B depende de C:Escribí un CMakeLists.txt para B así:
Esto funciona bien y compila exitosamente. El archivo CMake para A se ve así:
Al enlazar A, CMake establece una bandera de enlazador
-lC::C
y luego ld dice que C::C no existe. ¿Cómo sucedió esto? Creo que C::C es un objetivo y A debería conocerlo, pero CMake piensa que es un nombre de biblioteca. También creo que A no debería saber que B depende de C, ya que es una biblioteca privada.¿Alguien sabe cómo arreglar esto? No quiero escribir
find_package(C)
en el CMake de A, porque C es una biblioteca estática y creo que B debería manejar todas las dependencias de C.