내 프로젝트는 다음 디렉토리 구조가 있습니다만들기 : * .H 그런 파일이 없습니다 또는 디렉토리
- main.cu
- FA_kernels/* CU
- FD_kernels/* CU
- MEM_kernels을.. /*.cu
- MOD_kernels/*. CU
- 헤더/*. H
여기서 * .extension은 해당 확장자를 가진 파일을 의미합니다. makefile이 올바르게 작동하는 것처럼 보일 수 없습니다. 내가 갖는 오류 : -I 헤더하여 검색을위한 헤더 디렉토리가 사용할 수 있도록 컴파일러에 지정하는
FA_kernels/FA_SFD.cu:2:20: fatal error: FA_SFD.h: No such file or directory
#include "FA_SFD.h"
^
내 의도였다. 분명히 이것은 효과가 없습니다. 다음은 메이크 파일입니다.
CC := nvcc
LD := nvcc
MODULES := FA_kernels FD_kernels MEM_kernels MOD_kernels .
SRC_DIR := $(MODULES)
BUILD_DIR := $(addprefix build/,$(MODULES))
SRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.cu))
OBJ := $(patsubst src/%.cu,build/%.o,$(SRC))
INCLUDES := $(addprefix -I,headers)
vpath %.cu $(SRC_DIR)
define make-goal
$1/%.o: %.cu
$(CC) $(INCLUDES) -c $$< -o [email protected]
endef
.PHONY: all checkdirs clean
all: checkdirs build/lem
build/lem: $(OBJ)
$(LD) $^ -o [email protected]
checkdirs: $(BUILD_DIR)
$(BUILD_DIR):
@mkdir -p [email protected]
clean:
@rm -rf build
$(foreach bdir,$(BUILD_DIR),$(eval $(call make-goal,$(bdir))))
아이디어가 있으십니까?
UPDATE :는 여기에 전혀 성공하지 분명히 patsubst
OBJ
에 출력에서
nvcc FA_kernels/FA_SFD.cu FA_kernels/partition.cu FA_kernels/contribA.cu FA_kernels/parallel-SFD-List.cu FD_kernels/SFD.cu FD_kernels/flow_routines.cu FD_kernels/floodingDriver.cu FD_kernels/watershed.cu MEM_kernels/memory_dev.cu MEM_kernels/Data.cu MEM_kernels/MapInfo.cu MEM_kernels/memory.cu MOD_kernels/erosion.cu MOD_kernels/eroincidep.cu MOD_kernels/updates.cu MOD_kernels/runoffweight.cu MOD_kernels/depo-List.cu lem.cu -o build/lem
FA_kernels/FA_SFD.cu:2:20: fatal error: FA_SFD.h: No such file or directory
#include "FA_SFD.h"
^
compilation terminated.
Makefile:24: recipe for target 'build/lem' failed
make: *** [build/lem] Error 1
컴파일러 호출을 쉘에 인쇄 된대로 붙여 넣습니다. – user657267
@ user657267 업데이트를 참조하십시오 – JC2188
'include '문을 작성한 방법을 보여 주면 좋을 것입니다. –