我已经签出并阅读了我可能应该阅读的所有答案。我尝试添加标签并检查空格。但是,运行make
时仍然出现错误。
下面是我的工作树:
$tree
.
├── bin
├── cu
│ └── kernel_gpu.cu
├── inc
│ └── kernel.h
├── Makefile
├── obj
│ ├── kernel_gpu.o
│ └── main.o
└── src
├── kernel.cxx
└── main.cxx
我尝试使用wildcard
和patsubst
使我的Makefile
看起来不错。这是我的Makefile
:
DIR_INC = ./inc
DIR_SRC = ./src
DIR_CU = ./cu
DIR_OBJ = ./obj
DIR_BIN = ./bin
SRC = $(wildcard ${DIR_SRC}/*.cxx)
SRC_CU = $(wildcard ${DIR_CU}/*.cu)
OBJ = $(patsubst %.cxx,${DIR_OBJ}/%.o,$(notdir ${SRC}))
CUOBJ = $(patsubst %.cu,${DIR_OBJ}/%.o,$(notdir ${SRC_CU}))
BIN_TARGET = ${DIR_BIN}/${TARGET}
TARGET = test
CXX=g++
CU=nvcc
CUDA_INSTALL_PATH= /usr/local/cuda
CUDAFLAGS= -O2 -I. -I$(CUDA_INSTALL_PATH)/include -I ${DIR_INC}
LDFLAGS= -L$(CUDA_INSTALL_PATH)/lib64 -lcudart
${OBJ}:${SRC}
$(CXX) $(CUDAFLAGS) -c $< -o $@
$(CUOBJ):$(SRC_CU)
$(CU) $(CUDAFLAGS) -o $@ -c $<
${BIN_TARGET}:${DIR_OBJ}/%.o
$(CXX) $< -o $@ ${LDFLAGS}
.PHONY: clean
clean:
find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
在我的shell中键入make
时,总是收到相同的错误消息:
$ make
Makefile:45: *** missing separator. Stop.
第45行是:
44 ${OBJ}:${SRC}
45 $(CXX) $(CUDAFLAGS) -c $< -o $@
我回显了变量${OBJ}
和${SRC}
,结果显示为:
./src/main.cxx ./src/kernel.cxx
./obj/main.o ./obj/kernel.o
您需要使用硬标签替换这四个空格。
如果您使用某种用空格替换硬标签的编辑器,则需要禁用它或使用其他编辑器。