web-dev-qa-db-ja.com

QMakeのサブディレクトリテンプレートの使用方法

私はQtを学び始めています。私はVisual Studioの世界から移動しています。QMakeを使用してプロジェクトの構造を整理する方法を探しています。 「subdirs」テンプレートを見つけましたが、理解するのにかなり苦労しています。

私のプロジェクト構造は次のようになります。

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

私のproject.proは次のようになります

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

サブディレクトリ用の。proファイルには、適切な[〜#〜] sources [〜#〜][〜#〜] headers [〜# 〜]および[〜#〜] resources [〜#〜]変数セット。

[〜#〜] target [〜#〜][〜#〜] template [〜#〜]およびその他の必要な値を教えてください。proファイル。

また、公式のチュートリアル以外に良いQMakeチュートリアルがありますか?

64
zarzych

Troubadourのコメント に加えて、SUBDIRSターゲットはサブディレクトリの指定にのみ適していることに注意してください。したがって、あなたの余分な行

SOURCES += main.cpp

あなたのproject.proファイルは間違っており、最悪の場合main.cppファイルのビルドに失敗する可能性があります。せいぜい、qmakeは競合する仕様を持っているため、ファイルの解析を拒否します。

私はSUBDIRSテンプレートを数回使用しましたが、ロジックとGUIが別々になっているように、多かれ少なかれ独立したライブラリにパーツを構築できればうまくいきます。これを行う1つの方法を次に示します。

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

common.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

logic/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

build/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
85

ロジックとGUIフォルダーが実際にある種のターゲットを繰り返す場合は、subdirsを使用します。ライブラリ。他のものとは独立して構築できます。その場合は、使用するだけです

TEMPLATE = lib
TARGET = logic
CONFIG += dll

logic.proで。

それらが独立したターゲットではなく、ソースファイルを整理するために存在する単なるフォルダである場合、代わりにそれぞれで.priファイルを使用し、次を使用して.pro内に含めることができます

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

.priファイル内のファイルパスは.proファイルと相対的であり、not .priであることを覚えておいてください。ところで、.priファイルの使用はオプションです。これらのフォルダー内のファイルを.proファイルに直接リストできるためです。 .priファイルは、そのビットをすっきりさせ、.proファイルを短くするのに役立ちます。

17
Troubadour