2010-01-05 32 views
8

Daha önceki sorumun kurallar ve bağımlılıklar hakkında biraz kafa karıştırıcı olduğunu fark ettim. Aşağıdaki .pro dosyası doğru çalışır bir makefile oluşturur "oluşturulan" dizinde kaynak dosyaları qmake çalışır durumda var.Oluşturulan kod için kurallar

idl.target = generated/qmtest.h 
idl.commands = code_generator 
idl.config = no_link 
idl.depends = $$SOURCES $$HEADERS $$FORMS 

TEMPLATE  = app 
INCLUDEPATH += generated 
SOURCES  += generated/*.cpp 
PRE_TARGETDEPS += generated/qmtest.h 
QMAKE_EXTRA_UNIX_TARGETS += idl 

Ama qmake çalıştığında, onun sadece bir makefile üreten ve PRE_TARGETDEPS & QMAKE_EXTRA_UNIX_TARGETS bana yardım etmez. Üretilen/KAYNAKLAR içeriğine eklenecek bir makefile oluşturmak için nasıl qmake alabilirim?

cevap

5

Bunu iki geçişte yapmanız gerekebilir.

sizin qmake dosyasında

, aşağıdaki satırı ekleyin: Örneğin bash kullanarak (generated.pri dosyasına kaynakları ekleyin code_generator komut sonunda Ardından

include(generated/generated.pri) 

, ama fikir) hemen hemen tüm diller için aynıdır:

rm generated/generated.pri 
for file in $(ls generated/*.cpp); do 
    echo "SOURCES += ${file}" >> generated/generated.pri 
done 

/generated.pri oluşturulan Eğer qmake dosyasını çalıştırın ilk kez muhtemelen boşalacak. Make'i çalıştırdığınızda, generated.pri dosyasını dolduracaktır. İkinci kez, make dosyasını yeniden oluşturur (kaynak bir .pri dosyası olarak değiştirilir), sonra tekrar derler. Sizin için ikinci aşamayı yapacak diğer komutlarla uğraşabilirsiniz.

+0

Teşekkürler - Jeneratör sistemi ($$ idl.commands) kullanarak qmake sırasında çalıştırmak için zorlayarak sona erdi. Ürettiği makefile doğrudur ve çıktıyı hedefe eklediğimden, gerçekten hiçbir şeye zarar vermez. – swarfrat

4

Sadece şu anda aynı sorunu yaşadım, ancak yalnızca oluşturulan tek bir dosya için daha basit bir kullanım.

 
dummyfile.target = dummy.cpp 
dummyfile.commands = touch $$dummyfile.target 
QMAKE_EXTRA_TARGETS += dummyfile 
GENERATED_SOURCES += $$dummyfile.target 

Muhtemelen bir qmake döngüye o itmek olabilir ve aynı zamanda birden fazla dosya için uygun hedefler oluşturmak: Bunun için, ben KAYNAKLAR yerine GENERATED_SOURCES kullanarak bunu başarmak için daha basit bir yolunu buldu.

+0

+ PRE_TARGET_DEPENDS + = dummyfile – arved

0

Sağlam ve genel olduğuna inandığım bir çözüm buldum, bu da bir GNU Makefile üreten qmake'a dayanıyor.

biz de Makefile.pri belirtilen kaynaklar ve/veya başlıklarda üretir komut generate_Makefile.pri.sh yürüterek oluşturulan alır Makefile.pri adlı dosyasında tüm fazladan SOURCES ve HEADERS atamaları olduğunu farz edelim.

Bu dosyanın .pro dosyasında yer alması için, bu dosyanın kendiliğinden ve güvenilir bir şekilde oluşturulmasını istiyoruz, böylece qmake içeriğinin içeriğini hesaba katabilir ve Makefile'yi uygun bağımlılıklar ile oluşturabilir.

Bu, bizim .pro dosyamıza koymamız gereken şeydir.

Makefile_pri.target = Makefile.pri 
Makefile_pri.commands = generate_Makefile.pri.sh 
Makefile_pri.depends = FORCE 

Makefile.target = $$MAKEFILE 
Makefile.depends = Makefile_pri 

include($$Makefile_pri.target) 

QMAKE_EXTRA_TARGETS = Makefile Makefile_pri 

Bu şekilde: hayır Makefile.pri varsa

  1. , o zaman oluşturulan alır; Makefile.pri oluşturulan veya daha sonra qmake çalışır tekrar güncellenmiş ve bu bir GNU Makefile üreten qmake bağlıdır, ancak aynı yaklaşım ben yok, Makefile

olarak bahsedilen yenileyici dikkate içeriğini alır alır

  • ise diğer hedef yapı sistemleriyle birlikte çalışmaya adapte olabileceğine inanır.

  • İlgili konular