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などを使ってWindows、MacOSX、Linuxに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「追加の引数」で追記されているものです。
これができたらビルドをしていきましょう。