2013-03-14 13 views
5

W naszym projekcie chcemy użyć biblioteki innej firmy (A), która jest zbudowana przy użyciu autotools i która generuje plik obiektowy (B), którego potrzebujemy @ link time jednej z naszych bibliotek (C).Używając cmake, jak połączyć plik obiektowy zbudowany przez instrukcję external_project z inną biblioteką?

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

miałem wrażenie, że powinno to rade, ale polecenie cmake nie stwierdzając, że nie może znaleźć pliku A podczas kontroli na add_library.

Wszelkie poprawki lub alternatywne rozwiązania byłyby mile widziane! (zmiana biblioteki innej firmy nie jest opcją) dzięki!

Odpowiedz

3

Istnieje kilka kwestii tutaj:

Oprócz tych 4 linie to wszystko jest OK :-)

więc problem będzie, że chcesz dołączyć plik obiektowy B w wywołaniu add_library, ale to nie będzie dostępne na configure-czas (gdy CUpewnij jest wywołany), tylko w czasie kompilacji .

Chyba masz zamiar zrobić coś takiego:

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

Wielkie dzięki, doskonała odpowiedź! (Nie miałem zamiaru pisać efektywnego kodu cmake, ale może to byłoby czystsze;)) –

+0

@Fraser Przepraszamy, ale nie rozumiem ... Skąd pochodzi ten "$ {B}"? –

+0

@RaulLuna W pierwotnym pytaniu OP wspomniał, że istnieje plik obiektowy, który nazywa się "B" - zakładam, że jest on zdefiniowany jako zmienna wcześniej w CMakeLists.txt – Fraser

Powiązane problemy