2018年9月30日日曜日

openCV make file ②(忘備録)

9月29日14時
コピペやGUIに慣れると直ぐに嵌ります。Orz...
cdで目的のディレクトリーに行けない。思い込みと基本がなってない。覚えたつもりで入力しても間違えてるし。
cd ~/でどこにいくのかcdファイル名とコマンドの直後のスペースの意味。理解したつもりだとなにを間違ったのか分からない。
まずlsコマンドとls /でディレクトリーの確認をして思い込みを無くして。作業に慣れる。これコマンド操作の基本。

make fileの作業手順
①ターミナルの起動後コマンドでmkdir hello作業用ディレクトリーhelloを作る。(既にディレクトリーがある場合は②から)
②lsコマンドもしくはls /コマンドでディレクトリーの確認でhelloが表示されるか確認。
③cd helloで作業用ディレクトリーに移動
④pwdでどこに居るか念の為確認する。
g++ -o aaa aaa.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`で実行ファイル生成
-o オプション+スペース+実行ファイル名 でa.out でなく自分の好きな実行ファイル名を付けられます。

念の為もう一つ例:g++ -o main main.cpp `pkg-config --cflag opencv` `pkg-config --libs opencv`
⑥作業ディレクトリーで./aaaで実行

若しくは一つの例./mainで実行

 `pkg-config --cflags opencv` `pkg-config --libs opencv`の意味


これをコンパイルするときには,(1)cv.hなどのOpenCVのヘッダファイルが何処にあるのかの指定と,(2)libcvなどのOpenCVのライブラリが何処にあるのかの指定が必要です.これらを勝手にリストアップしてくれるのがpkg-configというコマンド.
まず,(1)のヘッダファイルについては
pkg-config --cflags opencv
を実行することでリストアップできます.僕の環境では
-I/opt/local/include/opencv
となりました.次に,(2)のライブラリについても同様に
pkg-config --libs opencv
を実行することでリストアップできます.僕の環境では
-L/opt/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore
となりました.これをg++に引数としてソースコードと一緒に渡してやればコンパイル出来ますです.
g++ -o main main.cpp -I/usr/include/opencv -L/usr/lib/opencv -lcv -lhighgui
ここで,pkg-configの結果を直接g++に渡したいものです.そこで登場するのが`(バッククオート).コマンドを`で囲むと,その部分が,そのコマンドを実行した結果に置き換わります.つまり
g++ -o main main.cpp `pkg-config --cflag opencv` `pkg-config --libs opencv`
と書けばOK
毎回こんな長いコマンドを打つのはやってられないので,Makefile
main: main.cpp
     g++ -o main main.cpp `pkg-config --cflag opencv` `pkg-config --libs opencv`

と書いてやれば,makeコマンド一発でコンパイル出来ます.
もうちょっと洗練して
main: main.o
     g++ -o $@ $< `pkg-config --libs opencv`
.cpp.o:
     g++ -o $@ -c $< `pkg-config --cflags opencv`
とかくとなおよし.

0 件のコメント:

コメントを投稿