狠狠撸

狠狠撸Share a Scribd company logo
マルチプラットフォームを意識
したQtプロジェクトの作り?
チブル?システムズ
2019.6.30
Qtのプロジェクト
? 単?プロジェクト
? アプリケーションや共有ライブラリを?つで完結するプロジェクト
? 複合プロジェクト
? サブディレクトリプロジェクトを通して、複数のプロジェクトをまと
めて管理するプロジェクト
ビルドディレクトリ例
? 単?プロジェクト
? build-(Project)-Desktop_Qt_(QtVer)_(Compiler)_(32/64)bit-
(Release/Debug)/(release/debug[windows only])/(obj/lib/dll/exeな
ど)
? 複合プロジェクト
? build-(RootProject)-Desktop_Qt_(QtVer)_(Compiler)_(32/64)bit-
(Release/Debug)/(SubProject)/(release/debug[windows
only])/(obj/lib/dll/exeなど)
プロジェクトの均?化
? インストーラなどを作る際に、プロジェクト毎にビルドディレ
クトリがまちまちの構造になっていると、その対応だけで労?
を費やしてしまう。
? プロジェクトの構成を均?化することで、コスト削減に繋がる。
? オススメは、サブディレクトリプロジェクトの直下にサブプロ
ジェクトをぶら下げる?法。
? どんなに?さいプロジェクトでも、サブディレクトリを必ず作る。
? プロジェクトを分けたくなったときに、簡単に対応できる。
? ビルドディレクトリも均?なので、インストーラも作りやすい。
QtプロジェクトをGitリポジトリで管理
? Qt Creator(IDE)は、gitを始め、複数のSCMに対応。
? Qtはマルチプラットフォームを開発できるので、リモートリポ
ジトリにコードを置いて、Windows/MacOS/Linuxそれぞれに
配置して確認したくなる。
? 単にネットワークドライブなどで共通化するのは避けたい。
? ***.pro.userというファイルが端末依存になり、競合する。
.priファイル
? Qtのqmakeでは、アプリケーションや共有ライブラリのメインとし
て読み込まれるプロジェクトファイル(*.pro)と、プロジェクトイン
クルードファイル(*.pri)に?別される。
? プロジェクトの主たる設定は*.proに書き込む。
? プラットフォーム毎に変化する設定を*.priに書き込み、.proに読み
込ませるようにする。
? 個?利?だけでなく、リポジトリを公開して他者に使ってもらう場
合も有効である。
? その場合は、「ここにこの名前で.priを作り、こういう変数であなた固有の値
を書いてね」と明?しておくとよい。
? メインプロジェクトディレクトリの?つ上(サブディレクトリの2つ
上)の階層に置くと、他のプロジェクトの邪魔にならない。
? 例) include(../platoform.pri)
例) Notes C API
を読み込む。
// ../platform.pri (for Windows)
NotesCAPIPath = C:/Users/myhome/notesapi901
// ../platform.pri (for MacOS)
NotesCAPIPath = /Users/myhome/notesapi901
NotesLibsPath = '/Applications/IBM Notes.app/Contents/MacOS’
// ../platform.pri (for Linux)
NotesCAPIPath = /home/myhome/notesapi901
NotesLibsPath = /opt/ibm/notes
// myproject.pro
TEMPLATE = subdir // サブディレクトリプロジェクト
CONFIG += ordered // 順番にビルドする
SUBDIRS += myshare myapp
// myshare/myshare.pro and myapp/myapp.pro 詳細はNotes C APIで確認
include(../../platform.pri)
DEFINES += PRODUCTION_VERSION
!macx {
DEFINES += W32 W DTRACE
}
!win32 {
DEFINES += HANDLE_IS_32BITS LARGE64_FILES OVERRIDEDEBUG
}
win32 {
DEFINES += NT _CRT_SECURE_NO_WARNINGS DUMMY
QMAKE_CXXFLAGS += -wd4503 -wd4005
contains(QMAKE_TARGET.arch, x86_64) {
DEFINES += W64 ND64 _AMD64_ ND64SERVER
NotesLibsPath = $$NotesCAPIPath/lib/mswin64
} else {
DEFINES += ND32 _X86_
NotesLibsPath = $$NotesCAPIPath/lib/mswin32
}
} else:macx {
DEFINES += MAC MAC_OSX MAC_CARBON NO_NULL_VTABLE_ENTRY __CF_USE_FRAMEWORK_INCLUDES__
TARGET_API_MAC_CARBON
DEFINES += LONGIS64BIT
} else:unix {
DEFINES += UNIX LINUX LINUX86 GCC3 GCC4 GCC_LBLB_NOT_SUPPORTED PTHREAD_KERNEL _REENTRANT
USE_THREADSAFE_INTERFACES _POSIX_THREAD_SAFE_FUNCTIONS HAS_IOCP HAS_BOOL HAS_DLOPEN
USE_PTHREAD_INTERFACES _LARGEFILE_SOURCE _LARGEFILE64_SOURCE
contains(QMAKE_TARGET.arch, x86_64) {
DEFINES += ND64 LINUX64 LINUX86_64 NDUNIX64 LONGIS64BIT
}
LIBS += -Wl,-rpath,$$NotesLibsPath
}
INCLUDEPATH += $$NotesCAPIPath/include
DEPENDPATH += $$NotesCAPIPath/include
LIBS += -lnotes -L$$NotesLibsPath

More Related Content

How to create a multi platform aware qt project