2013-03-14 7 views
5

In unserem Projekt wollen wir eine Drittanbieter-Bibliothek (A) verwenden, die mit Hilfe von Autotools erstellt wird und eine Objektdatei (B) erzeugt, die wir @ Link-Zeit einer unserer Bibliotheken (C) benötigen.Verwenden von cmake, wie eine Objektdatei, die von einer external_project-Anweisung erstellt wird, in eine andere Bibliothek verknüpft wird?

external_project(
    A 
    ... 
) 
set_source_files_properties(B PROPERTIES DEPEND A) 
add_library(C ... A) 
add_dependency(C B) 

hatte ich den Eindruck, dass dies den Trick tun soll, aber der Cmake Befehl fehlschlägt mit der Feststellung, dass es nicht Datei A bei der Prüfung für add_library finden.

Alle Fixes oder alternative Lösungen würden sehr geschätzt werden! (Ändern der Third-Party-Bibliothek ist keine Option) danke!

Antwort

3

Es gibt ein paar Probleme hier:

Abgesehen von diesen vier Zeilen sein sollte, es ist alles in Ordnung

:-)

Also die Frage wird sein, dass Sie die Objektdatei B im add_library Aufruf enthalten sein sollen, aber es ist überhaupt nicht configure-Zeit verfügbar sein wird (wenn CMake aufgerufen wird), nur bei der Erstellung .

Ich glaube, Sie gehen zu tun zu haben, so etwas wie: viel, perfekte Antwort

ExternalProject_Add(
    A 
    ... 
) 

set_source_files_properties(
    ${B} PROPERTIES 
    EXTERNAL_OBJECT TRUE # Identifies this as an object file 
    GENERATED TRUE # Avoids need for file to exist at configure-time 
) 

add_library(C ... ${B}) 
+0

Dank! (Ich hatte nicht vor, effektiven cmake-Code zu schreiben, aber vielleicht wäre das klarer gewesen;)) –

+0

@Fraser Sorry, aber ich verstehe nicht .... Woher kommt dieses "$ {B}" ?? –

+0

@RaulLuna In der ursprünglichen Frage hat das OP erwähnt, dass es eine Objektdatei gibt, die er "B" nennt - ich gehe davon aus, dass es als Variable früher in der CMakeLists.txt definiert ist – Fraser

Verwandte Themen