はじめに
前回はCMakeの簡単な使い方を紹介しました。今回はOpenBabelを利用したC++プログラムのビルド(コンパイル)について紹介します。一旦CMakeLists.txtファイル作成してしまえば、その後のプログラム開発が楽になります。なぜならば、コンパイル型言語のプログラムとはビルドとテストの繰り返しがとても多いからです。
OpenBabel用のCMakeLists.txt
先ず適当なC++プログラムとCMakeLists.txtを用意しました。今回用意したC++プログラムは以前紹介した部分構造検索についてのものです。以下のボタンをクリックしてzipファイルをダウンロードしてください。
適当なディレクトリを作成してzipファイルを解凍すると以下の表の通り、2個のファイルが出てきます。
ファイル名 | 説明 |
---|---|
CMakeLists.txt | CMakeの設定ファイル |
SSS.cpp | C++プログラム |
そしてCMakeLists.txtファイルの内容は以下の通りです。
1 cmake_minimum_required (VERSION 3.0)
2 project (test)
3
4 # コンパイラ設定
5 set(CMAKE_C_COMPILER gcc)
6 set(CMAKE_CXX_COMPILER g++)
7
8 # OpenBabel
9 find_package(PkgConfig)
10 set(ENV{PKG_CONFIG_PATH} "$ENV{HOME}/miniconda3/envs/ob3/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
11 pkg_check_modules(OpenBabel openbabel-3)
12 message("OpenBabel_VERSION = " ${OpenBabel_VERSION})
13 message("OpenBabel_INCLUDE_DIRS = " ${OpenBabel_INCLUDE_DIRS})
14 message("OpenBabel_LINK_LIBRARIES = " ${OpenBabel_LINK_LIBRARIES})
15 include_directories(${OpenBabel_INCLUDE_DIRS})
16
17 # executable
18 add_executable(SSS1 SSS1.cpp)
19
20 # link
21 target_link_libraries(SSS1 ${OpenBabel_LINK_LIBRARIES})
それでは簡単に解説します。OpenBabelに関する部分は主に9~15行目です。先ず9行目でpkg-configモジュールを有効化しています。”pkg_check_modules”というコマンドを利用するために9行目の命令は必要なので、とりあえずCMakeLists.txtの最初の方にでも書いておきましょう。10行目はpkg-configで拡張子がpcというファイルを検索するパスを追加しています。OpenBabelの場合は”openbabel-3.pc”というファイルにライブラリのパスやバージョンなどの情報が記述されています。pkg-configは”PKG_CONFIG_PATH”という環境変数を参照してこのpcファイルを検索しています。予め.bashrcファイル等でこの環境変数を設定しているならば10行目の記述は必要ないのですが、環境設定は人それぞれ異なるので、あえて記述して考えられる検索パスを列挙しておきましょう。この例では$ENV{HOME}/miniconda3/envs/ob3/lib/pkgconfigというディレクトリです。これはminicondaでob3という仮想環境を作成して、そこにopenbabel最新版をインストールした場合のディレクトリに相当します。
11行目は実際にopenbabelライブラリを検索する命令です。この命令では以下のように必要なバージョンを指定することもできます。
バージョン3.1.0を検索したい場合
pkg_check_modules(OpenBabel openbabel-3=3.1.0)
バージョン3.0.0以上を検索したい場合
pkg_check_modules(OpenBabel openbabel-3>=3.0.0)
12~14行目は検索結果を標準出力しています。この3行は無くても良いですが、何が検索でヒットしたのかが分かって便利です。色々と検索結果が返って来るのですが、以下の3個の変数が重要です。
変数名 | 説明 |
---|---|
OpenBabel_VERSION | OpenBabelのバージョン |
OpenBabel_INCLUDE_DIRS | ヘッダーファイルのパス |
OpenBabel_LINK_LIBRARIES | ライブラリのパス |
15行目ではヘッダーファイルのパスを追加しています。そして最後の21行目でライブラリを追加しています。
ビルドしてみる
CMakeを利用したビルドは以前のブログでも紹介しました。先ず適当な作業用ディレクトリを作成します。一般的には”build”という名前にします。そこに移動してcmake→makeです。
$ mkdir build
$ cd build
$ cmake ..
$ make
最後に出てきたファイルを実行してみましょう。
$ ./SSS1
match1: 3 12 11 10 5 4
match2: 24 29 28 27 26 25
上記のような出力であれば成功です。
Category: Linux関連, OpenBabel, プログラミング関連