2011-03-21 15 views
11

C++ projemi oluşturmak için CMake kullanıyorum ve birden çok çalıştırılabilir ve bir kütüphanesi var (aynı projenin tamamı). Her şey iyi çalışıyor, ancak çalıştırılabilirlerimden biri, kütüphane sınıflarının bir kısmını oluşturan bir kod üretecidir. Tüm jenerasyon çalışmam var ama kütüphane kurulmadan hemen önce bu yürütülebilir dosyayı (kodgen) nasıl arayacağımı anlayamıyorum. Linux ortamındayım. Umarım birisi buna cevap verebilir. CMakeLists.txt yılındaBir kütüphane oluşturmadan önce projede bir hedef yürütmek için CMake alın

cevap

17

:

İlk olarak, yürütülebilir tanımlayın:

add_custom_command(OUTPUT generated.cpp generated.hpp 
        COMMAND marks-code-generator ARGS args here maybe 
        MAIN_DEPENDENCY input-file.in 
        DEPENDS marks-code-generator 
        COMMENT here we go! 
        VERBATIM) 

seçenek VERBATIM emin platforma özel kılan: Sonra

add_executable(marks-code-generator gen.cpp) 

, kaynağı oluşturmak için özel bir komut tanımlamak kaçmak doğru bir şekilde yapılır. COMMENT, yürütme işi olarak yazdırılacak ve [ 66%] here we go! gibi bir şey verilecektir.

Son olarak, gerçek program için kaynak listesinde oluşturulan kaynağının adını:

add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp) 
+0

Teşekkür Jack, işaretleri-kod üreteci simdiki veya basit çıkış bunları hiç generated.cpp/saat dosyaları yazsak stdout'a ve OUTPUT bölümünün bunları yazmasına izin vermek için? Öyleyse yazarken onları sadece bir EOF ile ayırdım? – Mark

+0

Ardışık yapı sistemlerinin çalışmadığı fikrini gittikçe arttırıyorum. Onlar "make" ile çalışmazlar, automake ile çalışmazlar ve "CMake" ile çalıştıklarına inanmıyorum. Bunu tüm CMILLists.txt 'düzeyinde yapamayacağın bir sebep var mı? Çok büyük olursa 'include 'öğesini kullanın. Bir dosyaya çıkmanız gerekiyor. 'Add_custom_command''daki' OUTPUT' satırı sadece CMake'e hangi dosyaları oluşturduğunu söyler (kendi başına çalışmanın bir yolu olmadığından), bu yüzden bir "akış" kelimesini kullanmaya devam edin veya başlığınızı ve kaynağınızı oluşturmak için her şeyi kullanın. –

+0

Teşekkürler Jack, bir CMakeLists'e bakmaya bakacağım, bakmanın daha kolay olacağı gibi görünüyor. – Mark

İlgili konular