2010-08-23 13 views
21

Ist es möglich, install (TARGETS ...) mit Zielen zu verwenden, die in Verzeichnissen definiert sind, die mit add_subdirectory hinzugefügt wurden?install (TARGETS ...) und add_subdirectory

Mein Anwendungsfall ist, dass ich e.gg eine Umdrehung für gtest bauen will. Das gtest-Projekt hat zufällig eine CMakeLists.txt ohne irgendwelche Installationsanweisungen. Ich möchte das Paket erstellen, ohne diese Anweisungen der CMakeLists.txt von gtest hinzuzufügen.

Ich habe diese resultierende Verzeichnisstruktur:

+ gtest-1.5.0/... 
+ CMakeLists.txt 

Die CMakeLists von Gtest-1.5.0 definiert Bibliotheken wie folgt aus:

cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc) 
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc) 
target_link_libraries(gtest_main gtest) 

jetzt möchte ich etwas zu meiner CMakeLists hinzuzufügen. txt:

add_subdirectory(gtest-1.5.0) 
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib) 

aber Cmake korrekt heißt es:

CMake Error at CMakeLists.txt:10 (install): 
    install TARGETS given target "gtest" which does not exist in this 
    directory. 

Gibt es eine Möglichkeit, dies zu tun, ohne gtest-1.5.0 zu patchen?

Antwort

8

Sie könnten versuchen, Datei installieren statt Ziele zu installieren. Der Nachteil ist, dass Sie mit geteilten und statischen Builds umgehen müssen.

install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)

+0

ok .. Das könnte funktionieren, aber ich verstehe nicht, warum ich die definierten Namen in target_link_libraries verwenden kann und nicht in Befehle installieren! – Gizmomogwai

+2

Der Installationsbefehl untersucht nur das aktuelle Verzeichnis, wenn festgestellt wird, ob ein Ziel existiert, im Gegensatz zu target_link_libraries, das alle Ziele scannt. – RobertJMaynard

+0

Ok ... danke für die Erklärung, ich dachte so etwas, aber ich war mir nicht sicher (könnten Sie Ihre Installation bearbeiten (FILES-Befehl, weil installieren (FILES nimmt nicht den ARCHIVE-Parameter). – Gizmomogwai

Verwandte Themen