我是一名 cuda 程式員,并且是 vscode 和 Makefile 環境的新手。為了更好的編程,我為我的函式使用了多個 .cu 檔案。因此,對于 pull_model 和 build_meshgrid 函式,makefile 變為:
# Target rules
all: build
build: kernel
check.deps:
ifeq ($(SAMPLE_ENABLED),0)
@echo "Launch file will be waived due to the above missing dependencies"
else
@echo "Launch file is ready - all dependencies have been met"
endif
kernel: kernel.o Engine/Engine.o Engine/pull_model.o Engine/build_meshgrid.o
$(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $ $(LIBRARIES)
$(EXEC) mkdir -p bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
$(EXEC) cp $@ bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
%.o: %.cu
$(EXEC) $(NVCC) $(INCLUDES) $(ALL_CCFLAGS) $(GENCODE_FLAGS) -o $@ -c $<
run: build
$(EXEC) ./kernel
testrun: build
clean:
rm -f kernel *.o Engine/*.o
rm -rf bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)/kernel
clobber: clean
我需要以某種方式減少內核,如下所示:
kernel: kernel.o Engine/*.o
$(EXEC) $(NVCC) $(ALL_LDFLAGS) $(GENCODE_FLAGS) -o $@ $ $(LIBRARIES)
$(EXEC) mkdir -p bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
$(EXEC) cp $@ bin/$(TARGET_ARCH)/$(TARGET_OS)/$(BUILD_TYPE)
因此,Engine 檔案夾下的所有 .cu 檔案都被定位。
此致!
uj5u.com熱心網友回復:
好吧,你不能使用Engine/*.o,因為當你運行你的 makefile 時,不存在目標檔案,所以這個通配符將擴展為空,然后什么都不會被構建(除了kernel.o)。
這是一個 catch-22,因為您不能只告訴 make “如果您知道要構建哪些物件,就構建您將構建的所有目標檔案!”
如果您想要為目錄中的所有源檔案構建目標檔案Engine,您可以告訴 make 這樣做:
SRCS := $(wildcard Engine/*.c)
OBJS := $(SRCS:%.c=%.o)
kernel: kernel.o $(OBJS)
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513855.html
