QMakeのサブディレクトリテンプレートの使用方法
-
07-07-2019 - |
質問
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チュートリアルがありますか?
解決
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
他のヒント
ロジックおよびguiフォルダーが実際にある種のターゲットを繰り返す場合、 subdirs
を使用します。ライブラリ。他のものとは独立して構築できます。その場合は、次を使用します
TEMPLATE = lib
TARGET = logic
CONFIG += dll
logic.proで
それらが独立したターゲットではなく、ソースファイルを整理するために存在する単なるフォルダーである場合、代わりにそれぞれで.priファイルを使用し、.proを使用してそれらを含めることができます
include(logic/logic.pri)
include(gui/gui.pri)
.priファイル内のファイルパスは.proファイルに対して相対的であり、.priではなく ことに注意してください。ところで、.priファイルの使用はオプションです。これらのフォルダー内のファイルを.proファイルに直接リストできるためです。 .priファイルは、それを少しすっきりさせ、.proファイルを短くするのに役立ちます。