2016-04-05 21 views
3

Bir projede çalışmak için cmake + qt + visual studio kullanıyorum. Sorun Ben QT ui dosyaları değiştirirseniz görsel stüdyo yeni moc nesneleri oluşturmak istiyorum istiyorum. Eğer tam bir yapı inşa edersem, her şey işe yararsa, ama eğer bir dosyayı değiştirdiğimde "auto moc" değil ve tüm projeyi yeniden inşa etmem gerekiyor. Bencmake + qt + visual studio: Yapıdaki moc nesneleri

cmake dosyası oldukça basittir:

cmake_minimum_required(VERSION 3.2) 

set(CMAKE_VERBOSE_MAKEFILE ON) 

project(main) 

set(CMAKE_INCLUDE_CURRENT_DIR ON) 

set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTOUIC ON) 

find_package(Qt5Widgets) 

file(GLOB CPP_FILES *.cpp) 

add_executable(main ${CPP_FILES}) 
target_link_libraries(main Qt5::Widgets) 
target_compile_features(main PUBLIC cxx_nullptr) 

herkes bu (ui dosya değişiklikleri ve "otomatik moc" modifiye ui dosyası algılamak için görsel stüdyo sahip) işe gitmek için bir yol biliyor mu?

cevap

2

file(GLOB ...) numaralı telefonunuzu, bağımlılığın düzgün şekilde yürütülmesini istiyorsanız eklemek istediğiniz dosyaları açık bir şekilde listeleyerek başlayın. Bu ayrıca yapının beklediğiniz dosyaların kümesine bağımlılıklar yaratmasını sağlayacaktır. This answer, aşağıdaki nedenlerden başka, neden bunu yapmak istediğinizle ilgili daha fazla ayrıntıya sahiptir.

CMake documentation for AUTOUIC

bu ifadeyi içerir:

bir önişlemci #include yönergesi bulunursa ui_<basename>.h ile eşleşir ve bir <basename>.ui dosya, daha sonra uic uygun dosyası oluşturmak için yürütülen olacak bulunmaktadır.

.cpp kaynaklarınızın bu deseni takip eden #include yönergelerine sahip olduğunu doğrulayabilir misiniz? file(GLOB ...)'unuzda .cp dosyalarını değil, .h dosyalarını yakalamanız yeterlidir, bu nedenle sadece #include yönergelerini başlıklara aldınız, AUTOUIC bunları doğru şekilde seçmeyebilir. Bunu kullanmamdan beri bir süre geçti ve AUTOUIC'in onları sadece .cpp dosyalarını listelediyseniz ve add_executable() aramanızdaki başlıkları değil, yine de denemeniz gereken bir şey varsa bunları hatırlayamıyorum. Ayrıca, Q_OBJECT ve Q_GADGET makrolarını kullanan başlıklarınız varsa, AUTOMOC ile benzer bir durumla karşı karşıya kalabilirsiniz. Bu nedenle, sadece add_executable()'a verdiğiniz .cpp ve .h dosyalarını açık bir şekilde listeleyip sorununuzu çözüp çözmediğini görün.

+0

Yup, şimdi harika çalışıyor. – Mac