次のような Makefile があります。
.SECONDARY:
NVCC = nvcc
NVCCFLAGS = --gpu-architecture compute_20
CXX = g++
CXXFLAGS = -O3 -std=c++0x -Wall
CXXLINT = python cpplint.py
CXXLINTFLAGS = --filter=-build/include,-readability/streams,-runtime/sizeof,-whitespace/parens
PROTOC = protoc
PROTOCFLAGS = --cpp_out=.
BINS = my_binary
LIBS = -lcublas -lcusparse
PROTOS = $(wildcard *.proto)
SOURCES = $(wildcard *.cu)
HEADERS = $(wildcard *.cuh)
PBS = $(PROTOS:%.proto=%.pb)
DEPS = $(SOURCES:%.cu=%.d)
TESTS = my_test
all: lint protos
all: deps
all: bins
protos: ${PBS}
deps: ${DEPS}
bins: ${BINS}
clean:
rm -rf *.o *.d *.pb.cc *.pb.h ${BINS} ${TESTS}
lint:
${CXXLINT} ${CXXLINTFLAGS} ${SOURCES}
${CXXLINT} ${CXXLINTFLAGS} ${HEADERS}
tests: lint protos
tests: deps
tests: ${TESTS}
tests: tests-run
tests-run: ${TESTS}
for f in $^; do eval "/usr/bin/time -f \"$$f runtime: %E\" ./$$f"; done
%: %.o
${NVCC} ${NVCCFLAGS} -o $@ $^ ${LIBS}
%.d: %.cu
# ${CXXLINT} ${CXXLINTFLAGS} $*.cu
${NVCC} -M -o $*.d $*.cu
%.o: %.cu
${NVCC} ${NVCCFLAGS} -c -o $@ $*.cu
rm $*.d
%.pb: %.proto
${PROTOC} ${PROTOCFLAGS} $*.proto
${CXX} ${CXXFLAGS} -c -o $*.pb.o $*.pb.cc
ifneq ($(MAKECMDGOALS),clean)
-include ${DEPS}
endif
この問題は、proto ターゲットがビルドされるまで DEPS を生成できないために発生します。プロトコル バッファを構築すると新しいヘッダー ファイルがツリーに追加されるため、これが DEPS の前に最初に行われないと、生成された *.pb.h が見つからないため、nvcc -M (依存関係の作成) は失敗します。 . これを修正する方法はありますか?