2011-01-22 17 views
9

CMake kullanarak bir nesne dosyası oluşturmaya çalışıyorum, ancak CMake'in tam bir yürütülebilir dosyadan başka bir şey yapmasını sağlayamıyorum. Ben hedefin OUTPUT_NAME özelliğini değiştirerek denedimCMake oluşturma hedefinden yalnızca bir nesne dosyasını (* .o) nasıl oluştururum?

$(CC) $(CFLAGS) $(INC_DIRS) -c src/object.c 

, ama bu kötü kokan: Temelde (daha sonra sonuç VxWorks hedefe yüklenir ve bağlantılı olacak) Aşağıdaki derleme sonucu arıyorum ya da yardım ediyor gibi görünüyor.

Özel bir komut kullanarak bu konu üzerinde çalışabilirim, ancak bu CMake'in sağladığı güzel şeyler üzerinde çalışıyorum gibi görünüyor.

Yardımlarınız için teşekkürler!

+0

Neden nesne dosyasını istediğinizi merak ediyorum. CMake ile statik bir lib oluşturmak mümkün değil mi? Gerekirse, sadece bir kaynak dosyadan statik bir lib? Alternatif olarak, yine de yürütülebilir dosyayı bağlamaya çalışabilir ve oluşturulan nesne dosyalarını yeniden kullanabilmeyi deneyebilirsiniz. –

+0

@Andre One avantajı, projenin başka bir yerinde derleme hataları olduğunu bildiğinizde, tek bir dosya için derleme hatalarını düzeltme üzerinde çalışmaktır. Örneğin, CMakeLists.txt dosyalarını düzenlemeye gerek kalmadan, genel tüketim için henüz hazır olmayan başka bir geliştiriciyle yakın çalışıyorsanız). –

cevap

1

Özel komut yoluna giderdim. GENERATED ve EXTERNAL_OBJECT kaynak dosya özelliklerini ayarlarsanız, CMake ile derleme için bu nesne dosyalarını kullanmaya devam edebileceğinizi unutmayın.

4

Bu cevap CMake mailing list içinde bana verildi ve bir cazibe gibi çalıştı: Aşağıdaki ${CMAKE_SOURCE_DIR}/cpo Senaryoya

Bak

: Artık

#!/bin/sh 
d=$1; shift 
while [ "$1" != "--" ]; do 
    cp $1 $d/$(basename $1); shift 
done 

aşağıdaki CMakeLists.txt bakmak:

"cpo" başlatma komut dosyası, "f" hedef nesnesini dizininde ilk par kütüphane yerine ameter; her şey her zamanki gibi iş olmalı. Anahtar, komut dosyasının <OBJECTS> yer tutucusuna erişimidir, bu nedenle "-" ifadesinden sonra gerçek bağlantı komutu yok sayılırken, nesne dosyalarında çalışabilir. Bu şekilde, tüm CMake yetenekleri derleme ve kesişme bağlantı gerçekleşmeden hemen önce kullanabilirsiniz. IMO, ihtiyaçlarınıza kolayca uyarlanabilen oldukça temiz bir çözümü; 'un olumsuz tarafı, RULE_LAUNCH_LINK'un Makefile jeneratörleri ile sınırlı olmasıdır.