0

これまでのところうまく機能する 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 が肥大化しすぎないようにするため、一般的な規則 ( など) に感謝します。ありがとうございました!

4

1 に答える 1