2010-09-18 9 views
13

En CMake, no puedo mostrar mi biblioteca en ../out/library, solo biblioteca. Cuando hago la ruta ../out/library, me dice que no puede encontrar la biblioteca, como si quisiera vincularla.Directorio personalizado para la salida de la biblioteca CMake

add_library(../out/JE3D ../source/CDeviceLayerSDL.cpp) 

Hay más archivos, solo estoy ahorrando espacio. Cuando hago eso, obtengo este error.

Vinculación CXX lib biblioteca estática ../ cabo/JE3D.a /usr/bin/ar: lib ../ cabo/JE3D.a: No existe el fichero o directorio maquillaje [2]: * [lib ../ out/JE3D.a] Error 1 make [1]: * [CMakeFiles /../ out/JE3D.dir/all] Error 2 make: *** [all] Error 2

+0

necesita más información. Fragmentos de su CMakeLists.txt y corte y pasado de su mensaje de error ayudaría. –

+0

De acuerdo, agregué más información. – Jookia

Respuesta

25

La propiedad de destino LIBRARY_OUTPUT_DIRECTORY especifica el directorio donde se generarán los archivos de destino de la biblioteca.

set_target_properties(JE3D PROPERTIES 
     LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library) 

Si todas las bibliotecas están en un directorio, lo que resulte más conveniente para establecer la variable CMAKE_LIBRARY_OUTPUT_DIRECTORY, que se utiliza para inicializar la propiedad LIBRARY_OUTPUT_DIRECTORY al crear un objetivo.

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library) 

Editar: Verificar comentarios si su destino es una biblioteca estática

+1

La razón por la que no puede usar componentes de ruta en el nombre de la biblioteca es porque CMake está simplificando ese nombre para obtener el nombre de la biblioteca. En su host, está usando el patrón 'lib $ {FILE} .a', que no funciona cuando intenta usar una ruta. –

+0

¡Ah, lo entiendo! – Jookia

+21

LIBRARY_OUTPUT_DIRECTORY no funciona para mí. Según la documentación, esta propiedad controla el directorio de salida para bibliotecas compartidas. Las bibliotecas estáticas están controladas por la propiedad ARCHIVE_OUTPUT_DIRECTORY. – Jarlaxle

Cuestiones relacionadas