忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

OpenCVをCMake使ってでビルドするならfind_packageに丸投げするだけではいけない

起きたこと

今まで上手くビルドできていたのに、別プログラムをビルドしようとしたらむっちゃ怒られた。上手く動かないのである。

環境

  • Windows 10 64bit
  • cmake version 3.16.0
  • MSVC 19.24.28314.0

詳細

今まで~/testcode/hello/main.cppをビルドしていた。 ここで別の実装を試したくなり、~/testcode/next/main2.cppを実装。ビルドをしようとすると、怒られまくる。具体的には、未定義のコードを参照しようとしているみたいなことを書かれた。(実際のエラーは記録してませんでした。載せられず申し訳ない。) エラーを見る限り明らかに自分が記述したところではなかったが、念のためmain.cppを~/testcode/next/に持ってきてビルドを試みるも結果は変わらず。加えて~/testcode/hello/main.cppのビルドは上手くいくのである。困った。
以下に概略図を示す。汚い手書きですまない。
概略図

原因

cmakeを実行したときの出力とにらめっこしていると、MSVC向けにビルドしているにもかかわらずMinGW用のOpenCVを使おうとしていた。
(私の環境に入っているOpenCVはMSVC用のとMinGW用の2種類がある。)
CmakeLists.txtは全く同じものを利用していたため予想だにしていなかったが、CmakeLists.txt中のfind_package(OpenCV REQUIRED)は状況によって異なる OpenCVConfig.cmake・opencv-config.cmakeを見つけてくるらしい。
(OpenCVConfig.cmakeやopencv-config.cmakeはOpenCVの利用に必要なものを記述したもの...だと思う。)

解決方法

CmakeLists.txtに次の一文を追加した。

set(OpenCV_DIR "使いたい方のOpenCVに付属したOpenCVConfig.cmakeやopencv-config.cmakeを含むディレクトリ")

つまり、使いたい方のOpenCVに付属したOpenCVConfig.cmakeやopencv-config.cmakeを含むディレクトリをOpenCV_DIRという変数に設定したのである。

これは一度MinGW用のOpenCVを消去してcmakeコマンドを実行したときに出た以下のメッセージをみて知った方法である。

Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
  "OpenCV_DIR" to a directory containing one of the above files.

結論

OpenCVをCMakeからビルドするときにはOpenCV_DIR変数を設定することでパッケージの探索先を明示的に示そう。

拍手[0回]

PR