2009-09-13 14 views
59

Öğrenmeye başlayacağım Qt. Visual Studio dünyasından hareket ediyorum ve QMake kullanarak projemin yapısını düzenlemenin bir yolunu arıyorum. 'Subdirs' şablonunu buldum ama bunu anlamakta çok zorlanıyorum.QMake'in alt dizinleri şablonu nasıl kullanılır?

Projem yapısı aşağıdaki gibidir:

project_dir/ 
    main.cpp 
    project.pro 
    logic/ 
     logic.pro 
     some logic files 
    gui/ 
     gui.pro 
     gui files 

Benim alt dizinleri için .pro dosyalarında bu

TEMPLATE = subdirs 
SUBDIRS = logic \ 
      gui 
SOURCES += main.cpp 

ben uygun KAYNAKLARINI var gibi project.pro görünüyor , BAŞLIKLAR ve KAYNAKLAR değişkenleri ayarlandı.

Ben .pro dosyalarında ayarlamak gerektiğini HEDEF, TEMPLATE ve diğer gerekli değerleri söyle.

Ayrıca, resmi olandan başka iyi QMake eğitimi var mı?

cevap

80

Troubadour's comment'a ek olarak, SUBDIRS hedefinin yalnızca alt dizinleri belirtmek için uygun olduğunu unutmayın. Bu nedenle, project.pro dosyasında

SOURCES += main.cpp 

sizin fazladan satır yanlıştır ve büyük olasılıkla en kötü ihtimalle, sizin main.cpp dosyasını oluşturmak için başarısız olur. En iyi ihtimalle, qmake, dosyayı çelişen özellikleri olduğundan dosyayı ayrıştırmayı reddeder.

SUBDIRS şablonunu birkaç kez kullandım ve çok az bağımsız kitaplıklara, örneğin mantık ve gui ile yaptığınız gibi parçaları oluşturabilirseniz iyi olur.

project_dir/ 
-project.pro 
-common.pri 
-logic/ 
----logic.pro 
----some logic files 
-gui/ 
----gui.pro 
----gui files 
-build/ 
----build.pro 
----main.cpp 

project.pro:

TEMPLATE = subdirs 
SUBDIRS = logic \ 
      gui 

# build must be last: 
CONFIG += ordered 
SUBDIRS += build 

yaygın İşte bunu yapmanın yollarından biridir.pri:

#Includes common configuration for all subdirectory .pro files. 
INCLUDEPATH += . .. 
WARNINGS += -Wall 

TEMPLATE = lib 

# The following keeps the generated files at least somewhat separate 
# from the source files. 
UI_DIR = uics 
MOC_DIR = mocs 
OBJECTS_DIR = objs 

mantık/logic.pro:

# Check if the config file exists 
! include(../common.pri) { 
    error("Couldn't find the common.pri file!") 
} 

HEADERS += logic.h 
SOURCES += logic.cpp 

# By default, TARGET is the same as the directory, so it will make 
# liblogic.a (in linux). Uncomment to override. 
# TARGET = target 

gui/gui.pro:

! include(../common.pri) { 
    error("Couldn't find the common.pri file!") 
} 

FORMS += gui.ui 
HEADERS += gui.h 
SOURCES += gui.cpp 

# By default, TARGET is the same as the directory, so it will make 
# libgui.a (in linux). Uncomment to override. 
# TARGET = target 

derlemesi/build.pro:

TEMPLATE = app 

SOURCES += main.cpp 

LIBS += -L../logic -L../gui -llogic -lgui 

# Will build the final executable in the main project directory. 
TARGET = ../project 
+0

project.pro adresindeki SOURCES yönergesi hakkında iyi bir nokta. Bunu tamamen özledim. – Troubadour

+0

Bu kapsamlı yanıt için teşekkürler. Öğrenmeye başlamak için iyi bir nokta. – zarzych

+0

"Sipariş" kelimesinin global olduğu izlenimim. İlk iki kütüphaneyi aynı anda yapmak gibi görünmüyor. –

16

Mantıksal ve gui klasörleri, örneğin bir tür hedefi gerçekten yansıtıyorsa, subdirs'u kullanırsınız. Başka bir şeyden bağımsız olarak kurulabilen bir kütüphane. Eğer durum buysa, o zaman sadece

'u logic.pro içinde kullanın. onlar bağımsız hedeflerdir ancak Unutma .pro kullanarak

include(logic/logic.pri) 
include(gui/gui.pri) 

içinde bunları o zaman sadece her yerine bir .pri dosyasını kullanabilirsiniz kaynaklar dosyalarını düzenlemek için var ve şunları klasörler sadece değilseniz

.pri dosyalarındaki dosya yollarının .pro dosyasına ve numaralı .pri'ye göre olduğunu. BTW, bir .pri dosyasının kullanımı isteğe bağlı olarak, bu klasörlerdeki dosyaları doğrudan .pro dosyasında listeleyebildiğiniz için isteğe bağlıdır. .pri dosyası sadece onu biraz daha iyi hale getirir ve .pro dosyasını daha kısa tutmaya yardımcı olur.

+2

itibaren ne .pri dosyası metodu, Qt Creator uygulamasının her bir .pri dosyası ve onun devamı için alt klasörü göstermesine neden olur. veliler. – zarzych

+3

@zarzych: Bu doğru ama aynı zamanda da rahatsız edici .pri dosyasının dosya sisteminde nerede olduğuna ve sadece .pro seviyesinde bir düz liste olarak görüntülendiğine uymuyor. Eğer aynı isimle birkaç varsa özellikle can sıkıcı. – Troubadour

İlgili konular