Приносим извинения, если это несколько нубийский вопрос, я искал какое-то время и не нашел ответа.Правила зависимостей Makefile для множественной компиляции исходного объекта
Я новичок в makefiles и пытаюсь создать тот, который скомпилирует несколько исходных файлов в разных каталогах в объектные файлы в одном каталоге, а затем свяжет их.
Он работает, но он всегда перекомпилирует все файлы, даже если я их не изменил. Насколько мне известно, он должен делать это только в том случае, если зависимости старше целевых. Что я делаю не так?
Вот мой Makefile:
CC = mpic++
CCU = nvcc
ARCH = -arch=sm_52
SOURCEDIR = ./source
SOLVERDIR = $(SOURCEDIR)/solvers
OBJECTDIR = ./bin
INCLUDE = -I./include -I/home/alexander/.openmpi/include -I/usr/local/cuda-7.5/include
LIBRARY = -L/usr/local/cuda-7.5/lib64 -lcublas -lcudart
OUT = cgsolve
CDEPS = $(OBJECTDIR)/main.o $(OBJECTDIR)/timer.o $(OBJECTDIR)/cgMPIFuncs.o
compileC: $(CDEPS)
$(CC) $(INCLUDE) -c $(SOURCEDIR)/main.cpp -o $(OBJECTDIR)/main.o
$(CC) $(INCLUDE) -c $(SOURCEDIR)/timer.cpp -o $(OBJECTDIR)/timer.o
$(CC) $(INCLUDE) -c $(SOURCEDIR)/cgMPIFuncs.cpp -o $(OBJECTDIR)/cgMPIFuncs.o
CUDEPS = $(OBJECTDIR)/BiCGStab.o $(OBJECTDIR)/CG.o $(OBJECTDIR)/solverUtil.o $(OBJECTDIR)/cudaKernels.o
compileCU: $(CUDEPS)
$(CCU) $(ARCH) $(INCLUDE) -c $(SOLVERDIR)/BiCGStab.cu -o $(OBJECTDIR)/BiCGStab.o
$(CCU) $(ARCH) $(INCLUDE) -c $(SOLVERDIR)/CG.cu -o $(OBJECTDIR)/CG.o
$(CCU) $(ARCH) $(INCLUDE) -c $(SOURCEDIR)/solverUtil.cu -o $(OBJECTDIR)/solverUtil.o
$(CCU) $(ARCH) $(INCLUDE) -c $(SOURCEDIR)/cudaKernels.cu -o $(OBJECTDIR)/cudaKernels.o
OBJDEPS = $(OBJECTDIR)/main.o $(OBJECTDIR)/BiCGStab.o $(OBJECTDIR)/CG.o $(OBJECTDIR)/solverUtil.o $(OBJECTDIR)/cudaKernels.o $(OBJECTDIR)/timer.o $(OBJECTDIR)/cgMPIFuncs.o
build:
$(CC) $(OBJDEPS) $(LIBRARY) -o $(OUT)
all: compileC compileCU build
И опять же, жаль, если это повторение или что-то. Я не смог найти предыдущую версию этого вопроса. Спасибо за помощь!
Хороший пример, я выяснил, как make-файлы работают из этого. Это было бы намного проще, если бы примеры онлайн были менее загадочными. Большое спасибо! –