c++ - guia - qgis manual
InstalaciĆ³n de CMAKE(OBJETIVOS en subdirectorios (2)
Considere el siguiente archivo CMakeLists.txt
:
add_subdirectory(execA)
add_subdirectory(libB)
install(TARGETS execA libB
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
Recibo el siguiente error:
install TARGETS given target "execA" which does not exist in this
directory
execA
y libB
tienen sus propios archivos CMakeList.txt
y se encuentran en el directorio del project
, así como en el directorio de compilación que estoy ejecutando cmake
( cmake ..
):
project
|------ CMakeList.txt (the one with the code)
|----execA
| /- .cpp, .hpp and CMakelist.txt
|----libB
| /- .cpp, .hpp and CMakelist.txt
|---- lib
|---- bin
/---- build (where I´m commanding: $ cmake ..
Ayuda necesaria para arreglar el error.
De acuerdo con este informe de errores , el flujo de comando de install(TARGETS)
solo acepta objetivos creados dentro del mismo directorio .
Por lo tanto, necesita mover la llamada add_library()
al directorio de nivel superior o dividir la llamada de install(TARGETS)
en por cada destino, y mover cada una de ellas al subdirectorio correspondiente.
Aunque ayudaría a ver los archivos CMakeLists.txt
contenidos en los subdirectorios, supongo que contienen add_executable
y / o add_library
para crear tus cosas.
Además, debido a su ejemplo, supongo que está utilizando el mismo nombre de sus directorios para sus objetivos.
Dicho esto, debe saber que los símbolos definidos en un archivo CMakeLists.txt
en un subdirectorio no están visibles de forma predeterminada en el contexto del archivo CMakeLists.txt
en el directorio principal. Por eso, debería mover sus instrucciones de install
dentro de los archivos CMakeLists.txt
dentro de sus subdirectorios.
Esto debería resolver el problema, si mis pensamientos eran correctos. De lo contrario, le sugiero que publique en su pregunta también el contenido de los otros archivos mencionados anteriormente.
De todos modos, el error es bastante claro.
El archivo que contiene la declaración de install
para el destino llamado X
no contiene una declaración de creación de destino ( add_executable
y las demás) que da origen a ese objetivo, por lo que continúa diciendo que ese objetivo no existe en ese directorio.