これまでのところうまく機能する Makefile があります。ただし、成長し始めると、毎回すべてのソースを再コンパイルするのに時間がかかりすぎました。作業バージョンのスニペットを次に示します。
CC=$(CROSS_COMPILE)g++
CFLAGS=-Wall -I./include -pg -O2
VPATH=./src:./include
all: dotgazer.cpp dotgazer/Dot.cpp
$(CC) $(CFLAGS) $^ -o dotgazer.out `pkg-config --libs opencv`
依存関係は他にもたくさんありますが、これら 2 つで問題が何であるかを示すのに十分です。cpp
各ファイルのコンパイル段階を別のターゲットに移動しようとしています。最上位のファイル ( dotgazer.cpp
) に関しては、問題はなく、一般的なルール%.o: %.cpp
は正常に機能します。しかし、2 番目の依存関係を機能させることができません。現在の外観は次のとおりです。
CC=$(CROSS_COMPILE)g++
CFLAGS=-Wall -I./include -pg -O2
VPATH=./src:./include
all: dotgazer.o dotgazer/Dot.o
$(CC) $(CFLAGS) $^ -o dotgazer.out `pkg-config --libs opencv`
%.o: %.cpp
$(CC) -c $(CFLAGS) $^ -o $@
dotgazer/Dot.o: dotgazer/Dot.cpp
$(CC) -c $(CFLAGS) $^ -o $@
ルールのさまざまなバリエーションを試しましたDot.o
が、どれもうまくいかないようです。上記のエラーは次のとおりです。
Fatal error: can't create dotgazer/Dot.o: No such file or directory
どうすればいいですか?.o
ソースと同じフォルダーにファイルを配置することをお勧めします。%.o: %.cpp
また、多くのソース ファイルがあり、Makefile が肥大化しすぎないようにするため、一般的な規則 ( など) に感謝します。ありがとうございました!