2016-07-04 8 views
0

Ich habe eine CMakeLists.txt-Datei, die ein gemeinsame lib als en ExternalProject und diese lib Bedürfnisse baut in einem bestimmten Ort installiert werden, so dass es durch das Hauptprojekt aufgenommen werden kann Bauzeit. Ich verwende die folgende Zeile den Installationsvorgang auszuführen:Zieldatei fehlschlägt während der Installation der Bühne mit CMake

install(FILES $<TARGET_FILE:of_shared> DESTINATION oF/lib) 

Dies ist jedoch nicht:

Install the project... 
-- Install configuration: "" 
CMake Error at cmake_install.cmake:31 (FILE): 
file INSTALL cannot find 
"/Users/me/packages/builds/x86_64/of-0.9.3-osx-release/$<TARGET_FILE:of_shared>". 


make[3]: *** [install] Error 1 
make[2]: *** [of_shared-prefix/src/of_shared-stamp/of_shared-install] Error 2 
make[1]: *** [CMakeFiles/of_shared.dir/all] Error 2 
make: *** [all] Error 2 

Dies könnte ein Kompatibilitätsfehler von einer Art sein, vielleicht zwischen CMake Versionen. Ich benutze CMake 2.8.12.

Dies sind die damit verbundenen CMake Linien:

add_library(core OBJECT ${OF_SOURCE_FILES}) 
add_library(of_shared SHARED $<TARGET_OBJECTS:core>) 

set_target_properties(of_shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) 
set_target_properties(of_shared PROPERTIES OUTPUT_NAME openFrameworks) 

target_link_libraries(of_shared ${OF_CORE_FRAMEWORKS} ${OF_ADDON_FRAMEWORKS} ${OF_CORE_LIBS} ${OF_ADDON_LIBS}) 

install(FILES $<TARGET_FILE:of_shared> DESTINATION oF/lib) 
install(FILES libs/fmodex/lib/osx/libfmodex.dylib DESTINATION oF/lib) 
install(DIRECTORY libs/glut/lib/osx/GLUT.framework DESTINATION .) 

Offensichtlich, dass etwas mit dem $<TARGET_FILE:of_shared> versagt. Ansonsten funktioniert alles. Ich kann sehen, dass die gemeinsam genutzte Bibliothek erstellt wird.

+0

Vielleicht sollte ich etwas wie dieses verwenden: 'installieren (TARGETS mySharedLib LIBRARY DESTINATION lib)' anstelle von 'installieren (Dateien ...)' – symbolix

Antwort

0

Ich habe die Lösung selbst gefunden. Anstelle der Verwendung von:

install(FILES $<TARGET_FILE:of_shared> DESTINATION openFrameworks/lib) 

Man sollte verwenden:

install(TARGETS of_shared LIBRARY DESTINATION openFrameworks/lib) 

In diesem Fall of_shared ist der Name der Bibliothek.

Verwandte Themen