はじめに
前回、Windows上でRDKitのビルドに成功した。そもそもC++から使うことも目的だったため、早速 Visual Studioで RDKit のソースを書いてビルド&実行をしてみた。
環境
以下の環境で実施した。
- Windows 10
- VisualStudio 2017
- RDKit 2018_09_2
ソースコード
まず適当にソースを書く。今回はVisual Studio 17で新規のプロジェクトを作成し、以下のようにSDFから10件読み込んでSMILESに変換した結果を出力するプログラムを書いた。
#include <iostream>
#include <GraphMol/FileParsers/MolSupplier.h>
#include <GraphMol/SmilesParse/SmilesWrite.h>
int main(void) {
RDKit::SDMolSupplier supplier("nr-ahr.sdf");
RDKit::ROMol *mol;
int i = 0;
while ((mol = supplier.next()) && i < 10) {
std::cout << RDKit::MolToSmiles(*mol) << std::endl;
delete mol;
i++;
}
}
ビルド手順
ビルドはすんなりとはいかず、いくつかビルドの設定の対処が必要だったため以下に手順をメモっておく。
1. プロジェクトの構成とプラットフォームを、RDKitビルド時と合わせる。
今回構成は「Release」、プラットフォームは「x64」にした。
2.「プリコンパイル済みヘッダーを使用しない」に設定する。
構成プロパティの「C/C++」->「プリコンパイル済みヘッダー」を上記のように設定する。
3. 追加のインクルードディレクトリにRDKit、Boost等のディレクトリを追加する。
RDKitのビルド環境を参考にし、構成プロパティの「C/C++」->「全般」->「追加のインクルードディレクトリ」に以下を追加した。(Python関連は不要かもしれないが)
- C:\rdkit-Release_2018_09_2\Code\
- C:\rdkit-Release_2018_09_2\External\catch\catch\single_include
- C:\rdkitRelease_2018_09_2\External
- C:\Python36\include
- C:\Python36\Lib\site-packages\numpy\core\include
- C:\Boost\include\boost-1_65_1
※フォルダは各自のインストール先に読み替えていただきたい。
4. リンカの設定
構成プロパティの「C/C++」->「全般」->「追加のライブラリディレクトリ」に以下を追加した。
- C:\rdkit-Release_2018_09_2\build\lib\Release
また、構成プロパティの「C/C++」->「入力」->「追加の依存ファイル」に以下を追加した。
これらは前回のRDKitのビルドにより得られた生成物である。
- Alignment.lib
- AvalonLib.lib
- avalon_clib.lib
- Catalogs.lib
- ChemicalFeatures.lib
- ChemReactions.lib
- ChemTransforms.lib
- coordgenlib.lib
- DataStructs.lib
- Depictor.lib
- Descriptors.lib
- DistGeometry.lib
- DistGeomHelpers.lib
- EigenSolvers.lib
- FileParsers.lib
- FilterCatalog.lib
- Fingerprints.lib
- FMCS.lib
- ForceField.lib
- ForceFieldHelpers.lib
- FragCatalog.lib
- GraphMol.lib
- hc.lib
- Inchi.lib
- InfoTheory.lib
- maeparser.lib
- MMPA.lib
- MolAlign.lib
- MolCatalog.lib
- MolChemicalFeatures.lib
- MolDraw2D.lib
- MolHash.lib
- MolInterchange.lib
- MolStandardize.lib
- MolTransforms.lib
- Optimizer.lib
- PartialCharges.lib
- RDBoost.lib
- RDGeneral.lib
- RDGeometryLib.lib
- RDInchiLib.lib
- ReducedGraphs.lib
- RGroupDecomposition.lib
- ShapeHelpers.lib
- SimDivPickers.lib
- SLNParse.lib
- SmilesParse.lib
- StructChecker.lib
- Subgraphs.lib
- SubstructLibrary.lib
これで「ビルド」を実行すると、エラーなくコンパイルできるはずである。
実行したところ、Anaconda版と同じ結果を得ることができた。
>ConsoleApplication1.exe
CC(=O)O.CC(C)c1ccc2c(c1)CC[C@@H]1[C@]2(C)CCC[C@@]1(C)CN
C[C@@H](NCCCc1cccc(C(F)(F)F)c1)c1cccc2ccccc12.Cl
CC1=C(C(=O)OC(C)C)C(c2cccc([N+](=O)[O-])c2)C(C(=O)OC2CN(C(c3ccccc3)c3ccccc3)C2)=C(N)N1
CN(C)C(=O)C1(N2CCCCC2)CCN(CCC2(c3ccc(Cl)c(Cl)c3)CN(C(=O)c3ccccc3)CCO2)CC1.Cl
CCOC(=O)O[C@H](C)OC(=O)c1ccc2c(c1)cc(C(=O)NC1CCN(C(C)C)CC1)n2Cc1cc(-c2ccc(Cl)s2)on1.Cl
CCCCCCCCCCCCCCCC[N+](C)(C)CC.[Br-]
CCCCCCCCCCCCCCCCCC[N+](C)(C)C.[Cl-]
Cc1cc(OCCOCC[N+](C)(C)Cc2ccccc2)ccc1C(C)(C)CC(C)(C)C.[Cl-]
N=C(NCCCCCCNC(=N)NC(=N)Nc1ccc(Cl)cc1)NC(=N)Nc1ccc(Cl)cc1
CC/C(=C(\c1ccccc1)c1ccc(OCCN(C)C)cc1)c1ccccc1.O=C(O)CC(O)(CC(=O)O)C(=O)O
C++からガンガンRDkit使うぞ!