NotesとQtでWindows、Mac OS X、Ubuntuのデスクトップアプリ(その9 - 共有ライブラリコンパイル編)

ここまでをおさらいします。

最初に、Statusクラス(STATUS値のラッパークラス)を作成しました。

次に、Lmbcsクラス(LMBCS文字列のラッパークラス)をNLS版で作成しました。

最後に、Databaseクラス(NSFファイルのラッパークラス)を、必要最低限の実装で作成しました。

これを、ntlxライブラリとしてまとめていきます。

Qtでは、qmakeというツールを使って、補足コードを生成したり、プラットフォームに応じたコンパイラオプション、リンカオプションを展開し、そのあとで、各プラットフォームのコンパイラやリンカを使って、ソースコードをバイナリ形式にしていきます。

そのqmakeに渡す指示書のようなものが、proファイル(プロジェクトファイル)です。

QT       -= gui

TARGET = ntlx
TEMPLATE = lib

DEFINES += NTLX_LIBRARY

SOURCES += lmbcs.cpp \
    database.cpp

HEADERS += lmbcs.h\
        ntlx_global.h \
    status.h \
    database.h

win32 {
    DEFINES += W32 NT
}
else:macx {
#   DEFINES += MAC
# Mac環境でDWORDが32bitではなく、64bitになってしまうため、LONGIS64BITを識別子に加える。
    DEFINES += MAC LONGIS64BIT
}
else:unix {
    DEFINES += UNIX LINUX W32
    QMAKE_CXXFLAGS += -std=c++0x
    target.path = /usr/lib
    INSTALLS += target
}

LIBS += -lnotes

DISTFILES += \
    .gitignore

gitなどを使ってWindowsMacOSXLinuxに1つのコードを配布することを前提に、絶対パスを必要とするパラメータはここに記述しないこととしています。

そのため、リンク先となるNotesの共有ライブラリは、ファイル名のみ共通して使えるので、「LIB += -lnotes」として記述しています(拡張子は省略できます)が、場所(パス)については、Qt Creatorのプロジェクト管理機能で補完しています。

例えば、MacOSXでは、ビルドステップにおいて以下のような設定をします。

"INCLUDEPATH+=/Users/Shared/notesapi/include" "LIBS+=-L'/Applications/IBM Notes.app/Contents/MacOS'"

【追記】2017.3.24 記事をアップした時の追加の引数が間違えておりました。訂正してお詫びします。

【追記】2017.4.6 Mac環境でDWORDが64bit幅のunsigned longが使われてしまうことを発見しました。そのため、Qtプロジェクトファイルで、DEFINESに識別子LONGIS64BITを加えるようにします。

このうち、INCLUDEPATH、LIBSをqmake「追加の引数」で追記されているものです。

これができたらビルドをしていきましょう。