Learning OpenCV bookを使用してOpenCVを学習しています。
コードのコンパイル中に直面する問題の1つは、実行可能ファイルをコンパイルして取得するための長いコマンドを作成する必要があることです。
これは私が使用しているコマンドです
g++ `pkg-config –cflags opencv` file_name.cpp -o output_file `pkg-config –libs opencv`
私はMakeエキスパートではありませんが、makeを使用してその長いコマンドを書く必要がなくなると思います。その前に、ワークフローを説明する必要があります。ホームディレクトリ(~/opencv/
)にopencvというディレクトリを作成しました。私は本をセクションごとに読んでおり、そのディレクトリ内の新しいcppソースコードファイルにサンプルまたは演習をコーディングしています。 だから、手元にファイルの名前がわからない。
今、私がやりたいことは、
opencv
ディレクトリにfacedetect.cpp
という名前の新しいファイルをコーディングしたとします。makeをこのように呼び出すと
make facedetect
次に、makeに次のコマンドを実行させたい
g++ `pkg-config --cflags opencv` facedetect.cpp -o facedetect `pkg-config --libs opencv`
abc.cppという名前の新しいファイルを作成するたびに、make abc
を実行して実行できるようにします
$ ./abc
コマンドラインでabc.cppをテストする
毎回その長いコマンドを入力するフラストレーションを節約できるように、そのmakeファイルを提供してください。
PS:私はこれについて助けを求めてグーグルで調べました this を使用してCMakeを見つけましたが、それが何をするのか理解できませんでした。また、同じタスクにCMakeをどのように使用できるかも説明してください。
次のように、作業ディレクトリにMakefile
というファイルを作成できます。
CFLAGS = `pkg-config --cflags opencv`
LIBS = `pkg-config --libs opencv`
% : %.cpp
g++ $(CFLAGS) $(LIBS) -o $@ $<
その後、このファイルをすべての単一ファイルプログラムに使用できます。コンパイルしたいファイルのベース名でmake
を呼び出すだけです。にとって facedetect.cpp
それは
make facedetect
ここでいくつかの詳細:
メイクファイルの一般的な形式は次のとおりです。
target : dependecy1 dependenc2 ...
command that generates the target
したがって、あなたの例では次のように書くことができます:
facedetect : facedetect.cpp
g++ $(CFLAGS) $(LIBS) -o facedetect facedetect.cpp
新しい例ごとに、新しいターゲットを作成できます。しかし、より一般的にすることもできます:
% : %.cpp
g++ $(CFLAGS) $(LIBS) -o $@ $<
ここに %
は、空でない部分文字列に一致します。自動変数$@
および$<
ターゲットファイルとソースファイルの名前を置き換えます。詳細については、 ドキュメント作成 を参照してください。
GNU Makeは非常に賢く、これに必要なMakefileは、これまでに示した他の回答のように冗長である必要はありません。以下に、OpenCVの例をコンパイルするために使用できる簡単なMakefileを示します。
CPPFLAGS = $(Shell pkg-config --cflags opencv)
LDLIBS = $(Shell pkg-config --libs opencv)
それでおしまい。 Makeの 暗黙の規則 のおかげで、Makefileはこれほど短くなります。
その後、通常どおりmake
を実行します。
make facedetect
これは、facedetect.c
またはfacedetect.cpp
同じディレクトリ内。
Makeを学びたい場合は、次の(無料!)本をお勧めします。 http://oreilly.com/catalog/make3/book/index.csp
次を含む作業ディレクトリにmakefile
という名前のファイルを作成します。
CFLAGS = $Shell(pkg-config --cflags opencv)
LIBS = $Shell(pkg-config --libs opencv)
facedetect : facedetect.cpp
g++ $(CFLAGS) $(LIBS) -o $@ $<
次に、コンパイルしたいときは次のように入力します。
$ make
([〜#〜] ps [〜#〜]-CMake
はmake
とは非常に異なることに注意してください-今のところ、make
を使用してください。)