この OpenCV 2 Cookbookのチュートリアル コードをいじっています。コードには Makefile が付属していないので、コードベース内のすべてのファイルを Make できる Makefile を作成したいと考えています。私の計画は、プロファイリングを使用してすべてのファイルをコンパイルし、すべての実行可能ファイルを実行して gprof の結果を収集するスクリプトを作成することです。次に、さまざまな OpenCV 関数の計算時間についてある程度の直感を得ることができます。
コードベースは次のように構成されています。tutorial_code/Chapter[1-10]/*.cpp
各.cpp
ファイルは自己完結型であり、このコードベース内の他のモジュールとリンクせずにコンパイルできます。(ただし、ヘッダーのみの小さなライブラリがいくつかあります。)
ここに私が立ち往生しているいくつかのことがあります:
- 通常、
$(EXEC)
Makefile の は、多くの構築作業の集大成であるファイルを表します。ただし、私の場合は、ファイル$(EXEC)
ごとに個別に作成したいと考えてい.cpp
ます。私はこれを正しく行うことに近づいていると思いますが、これまでのところ、私の Makefile は生成されますが生成され*.o
ません*.out
SOURCES = $(wildcard *.cpp)
これは、現在のディレクトリにある一連の cpp ファイルを「収集」する方法であることを理解しています。サブディレクトリ内のすべてのファイルSOURCES = $(wildcard */*.cpp)
を掘り下げて取得することは理にかなっています。.cpp
しかし、うまくいかないようです。
このチュートリアルから始めて、提案された機能を実装する Makefile をセットアップしました。それはうまくいきません...ディレクトリにドリルダウンして$(wildcard */*.cpp)
いないようです.$<
$@
basefilename.o
basefilename.out
CC = g++
CC_FLAGS = -w `pkg-config opencv --cflags`
LINK = g++
LINKOPTS = -pg `pkg-config opencv --libs`
SOURCES = $(wildcard */*.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
EXEC = $(SOURCES:.cpp=.out)
%.out: %.o
$(LINK) $< $(LINKOPTS) -o $@
%.o: %.cpp
$(CC) -c $(CC_FLAGS) $< -o $@
clean:
rm -f $(EXEC) $(OBJECTS)
- 私は Makefile と OpenCV にかなり精通しており、Makefile で依存関係やオブジェクトなどのリストを手作業でコーディングして自分のプロジェクトをコンパイルする際に問題はありませんでした。ただし、当面の問題としては、ユーザーの介入をあまり必要とせずにすべてを自動的に作成できれば素晴らしいと思います。
- 私がコンパイルしようとしているコードベースのコピーについては、遠慮なくコメント、電子メール、またはメッセージを送ってください。
- また、ディレクトリを反復処理し、
tutorial_code/Chapter[1-10]
ディレクトリごとに 1 つの Makefile を作成するスクリプトを作成することも考えました。次に、スクリプト内に別の関数を作成して、各ディレクトリで一度 Make を呼び出します。ただし、1 つの壮大な Makefile を実行するというアイデアは、より楽しいように思えます。
編集:これはSOURCES = $(wildcard *.cpp)
、ファイルが配置されている同じディレクトリに Makefileを使用して配置すると機能しcpp
ます。$(wildcard */*.cpp)
ただし、サブディレクトリにドリルダウンする方法をまだ見つけようとしています。
編集 2: 上記の Makefile が正しく機能するようになりました。以前のバージョンを表示するには、編集履歴を自由にスクロールしてください。