スポンサーリンク

公式サイトの翻訳と解説によるOpenCVの環境構築3 ~ビルド編~

記事内に広告が含まれています。

この記事は第一回第二回の続きになります。それぞれの内容をざっくりと説明しときますと、

第一回は青写真を示したような感じで、OpenCVってそもそも何かとか、インストールには2通りの方法があるみたいなことを説明しました。僕の環境について書いた回でもありました。

第二回はOpenCVをビルドするに当たって、ソースコードはどこからダウンロードすればいいかとか、その際の注意事項を説明しました。ついでに、僕のような環境だとどんなコマンドを実行すればいいかについても説明しました。

今回は、第二回でダウンロードしてきたソースコードをビルドしていく回になります。

スポンサーリンク

ビルドのために

ビルドをする際に必要なファイルは、環境によって違ってきます。例えば、僕の愛用しているGCC/G++だとMakefileですが、Visual Studio Codeならソリューションファイルが必要になります。

OpenCVは、git cloneでリポジトリをダウンロードしてきた状態ではMakefileやソリューションがまだ無い状態になっています。そこで、環境に合った中間ファイル(Makefileとかソリューションとか)を生成する必要があります。

その中間ファイルの生成にCMakeを使います。公式サイトには次のように書かれています。

At this step CMake will verify that all necessary tools and dependencies are available and compatible with the library and will generate intermediate files for the chosen build system.

この段階で、CMakeはすべての必要なツールと依存関係が利用可能で、かつライブラリと互換性があるか確かめる。そして、CMakeは選択されたビルドシステムに応じた中間ファイルを生成する。

cmake-gui application allows to see and modify available options using graphical user interface. See https://cmake.org/runningcmake/ for details.

cmake-guiアプリは利用可能なオプションをGUIを使って変更したり、確認したりできる。詳細はhttps://cmake.org/runningcmake/を見てほしい。

要するに、CMakeを使ってMakefileなりソリューションファイルなりを生成しようってことですな。そのときはCUIとGUIのどちらでも使えるから、好きな方を使ってねと。

CMakeにはCUIとGUIの2つが用意されているんですが、いずれにしろ環境に合った中間ファイルを作ってくれます。

この中間ファイルは環境によって内容が変わってしまうんですが、CMakeは環境に合わせた中間ファイルを自動で生成してくれます。これが「CMakeはプラットフォーム間の差異を吸収してくれる」と言ってることの意味ですな。

僕はGUIを使いましたが、CUIを使う場合は次のようなコマンドを実行します。

cmake -G<generator> <configuration-options> <source-directory>

<generator>でMakefileとかソリューションとかを、<configure-options>に必要な構成オプションを、<source-directory>に前回記事でダウンロードしてきたopencvのディレクトリを指定します。

その設定の指定方法は後述します。公式サイトの流れ通り、先にビルドの流れを解説していきます。

ビルドの実行

これまでで、ソースコードの取得とMakefile(もしくはソリューション)の作成が済んでいます。では、ビルドをしていきます。ビルドはcmakeを使ってもできるし、makeを使ってもできるよという旨の表記が公式サイトにあります。

During build process source files are compiled into object files which are linked together or otherwise combined into libraries and applications. This step can be run using universal command : cmake --build <build-directory> <build-options>

… or underlying build system can be called directly : make

ビルド中、ソースファイルはオブジェクトファイルにコンパイルされ、そのオブジェクトファイルはライブラリやアプリケーションに一緒にリンクされる、あるいは結合される。この操作は共通のコマンドを走らせることで実行できる。

もしくは、基本的なビルドシステムを直接呼び出してもいい。

要するに、cmakemakeコマンドを実行するとビルドが始まって、オブジェクトファイルが生成されるってことですな。その過程でソースファイルがライブラリやアプリケーションにくっつけられるってことですね。

というわけで、ここまでの手順がお済みの方は次のコマンドのどちらかを実行していただければビルドできるはずです。失敗した場合は、Makefileを作る段階での設定をいじって試行錯誤してみてください。

cmake --build <build-directory> <build-options>

make

cmakeを使う場合の<build-directory>はビルドしたい対象のあるディレクトリ、<build-options>は上の節で説明したMakefileを作るときの構成オプションではなくて、ビルド時のオプション(--target installとか)になります。

そのビルドの成果物はどうせならMSYS2やVisual Studio Codeのライブラリフォルダに入れてほしいものです。その要求に答えてくれるのが先ほどチラッと書いた --target install というビルドオプションになります。

--target install を付けてcmakeを実行すれば、ユーザの指定したインストール場所に成果物を自動でコピーしてくれます。指定しない場合、UNIXなら/usr/localにコピーされて、WindowsならC:/Program Filesにコピーされます。

公式サイトにはこのように表記されています。

During installation procedure build results and other files from build directory will be copied to the install location. Default installation location is /usr/local on UNIX and C:/Program Files on Windows. This location can be changed at the configuration step by setting CMAKE_INSTALL_PREFIX option. To perform installation run the following command : cmake --build <build-directory> --target install <other-options>

インストール中、ビルドディレクトリにあるビルドの成果物とそれ以外のファイルはインストール場所にコピーされる。デフォルトのインストール場所は、UNIXなら/usr/localで、WindowsならC:/Program Filesだ。この場所は設定のステップでCMAKE_INSTALL_PREFIXオプションを設定することで変更できる。インストールを実行するために次のコマンドを実行しよう。cmake --build <build-directory> --target install <other-options>

Note
This step is optional, OpenCV can be used directly from the build directory. If the installation root location is a protected system directory, so the installation process must be run with superuser or administrator privileges (e.g. sudo cmake ...).

備考
この段階を実行するかどうかは任意であり、OpenCVはビルドディレクトリから直接使うことができる。インストール場所のルートがプロテクトのかけられたシステムディレクトリだった場合、インストールプロセスはスーパーユーザか管理者権限で実行しなければなりません(例えば、sudo cmake ...というように)。

要するに、--target installオプションを付けてcmakeを実行すると上に書いたようなことが出来ますよと。ただ、「OpenCVを使う」という観点で言えば、絶対にやらないといけないってわけじゃないと。

とはいえ、個人的には間違ってビルドしたライブラリを消しちゃう可能性とか、設定の手間なんかを考えるとやっておいた方が良いだろうと思いますが。

今までの話の中で、CMAKE_INSTALL_PREFIXとかオプションの話をしていましたが、次の節で軽くどうやって設定すればいいのかって話をしていきます。

スポンサーリンク

構成オプションの変更方法

構成オプションの話については公式サイトのこのページが役に立ちます。そのページをチラッと見ていただくと分かるかと思いますが、それをすべて翻訳して説明してると長くなりすぎるんで、この記事で扱った内容に関係しそうな部分だけをまとめときます。

まずは、構成オプションの設定方法です。

Configuration options can be set in several different ways:

・Command line: cmake -Doption=value ...
・Initial cache files: cmake -C my_options.txt ...
・Interactive via GUI

構成オプションは複数の方法で設定できる:

・コマンドライン:cmake -Doption=value ...
・初期キャッシュファイル:cmake -C my_options.txt ...
・GUIによる対話形式

上の節では構成オプションはコマンドラインかGUIで設定できると説明しましたが、初期キャッシュファイルを使う方法と合わせて、3つの方法で構成オプションを設定できるってことですな。で、もしCUI(コマンドライン)で設定する場合は-Doption=valueという書き方で指定すると。

なので、上の節で説明したCMAKE_INSTALL_PREFIXを設定する場合は-DDCMAKE_INSTALL_PREFIX=<ディレクトリ>という形式で指定すればいいということになります。

ディレクトリの指定方法をまた公式サイトから引用してみます。

This path can be relative to current working directory, in the following example it will be set to <absolute-path-to-build>/install:
cmake -DCMAKE_INSTALL_PREFIX=install ../opencv

このパスは現在のワーキングディレクトリに対する相対パスにできる。次の例では<absolute-path-to-build>/installに設定している。
cmake -DCMAKE_INSTALL_PREFIX=install ../opencv

コマンドラインからcmakeを実行する場合はカレントディレクトリとしてopencvが置かれているフォルダを指定するでしょうが、そのフォルダからの相対パスで指定してもいいんだよと。もしinstallと指定すれば、カレントディレクトリにあるinstallというフォルダにコピーされることになるとも説明されています。

上の節でも注意しましたが、管理者権限が無いと変更できないようなディレクトリを指定した場合は、--target installを管理者権限で実行するのをお忘れなく。

これで、とりあえずOpenCVをビルドする方法は解説しました。構成オプションにも色々な種類があるので、公式サイトを見るなり、トライアルアンドエラーを繰り返すなりしてくださいませ~。

気が向いたら構成オプションの説明をするかもしれませんが、とりあえずOpenCVのビルド説明は以上になります。ここまで読んで頂いてありがとうございました。

また次の記事でお会いしましょう~。ではでは~。

タイトルとURLをコピーしました