2013-03-14 11 views
5

Projemizde, ototools kullanılarak oluşturulmuş ve kütüphanelerimizden birinin (C) bir bağlantı zamanına ihtiyaç duyduğumuz bir nesne dosyası (B) oluşturan bir üçüncü taraf kitaplığı (A) kullanmak istiyoruz. cmake'yi kullanarak, bir external_project ifadesi tarafından oluşturulmuş bir nesne dosyasını başka bir kütüphaneye nasıl bağlarsınız?

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

Bu hile yapmak gerekir izlenimi vardı, ama cmake komut o add_library için kontrol sırasında dosya A bulamadığını belirterek başarısız olur.

Herhangi bir düzeltme veya alternatif çözüm çok takdir edilecektir! (üçüncü taraf kütüphanesini değiştirmek bir seçenek değildir) teşekkürler!

cevap

3

burada birkaç sorun vardır:

  • external_projectExternalProject_Add
  • Kaynak dosyalar mevcut DEPEND denilen özelliği yoktur olmalı - set_source_files_properties komut burada hiçbir etkisi yoktur.
  • add_dependency bu 4 hatlarından dışında add_dependencies

olmalıdır (A olan)

  • add_library geçirilecek kaynak dosyalarının bir listesini beklediğini değil, başka CKağıt hedefi (İşte properties available on source files vardır) hepsi tamam :-)

    Bu nedenle,numaralı nesne dosyasını add_library numaralı aramaya eklemek istediğiniz olacak, ancak yapılandırma zamanında (CMake çağrıldığında) kullanılabilir olmayacaktır, yalnızca oluşturma zamanında .

    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

    teşekkür çok mükemmel cevap:

    Sana böyle bir şey yapmak zorunda gidiyoruz düşünüyorum! (Ben etkili cmake kodu yazmak niyetinde değildi, ama belki daha açık olurdu;)) –

    +0

    @Fraser Üzgünüz, ama anlamıyorum .... Bu nereden "$ {B}" nereden geliyor? –

    +0

    @RaulLuna Özgün soruda, OP, "B" olarak adlandırılan bir nesne dosyasının varlığından bahsetmişti - bunun, CMakeLists.txt dosyasında daha önce bir değişken olarak tanımlandığını farz ediyorum. – Fraser

    İlgili konular