makefile:45:**缺少分隔符。停止

makefile:45:**缺少分隔符。停止,makefile,Makefile,我已经核对并阅读了所有答案,我可能应该这样做。我尝试添加一个选项卡并检查空格。但是,我在运行make时仍然会出错 下面是我的工作树: $tree . ├── 箱子 ├── 铜 │   └── 内核gpu.cu ├── 股份有限公司 │   └── kernel.h ├── 生成文件 ├── obj │   ├── 内核&gpu.o │   └── 梅因 └── src ├── kernel.cxx └── main.cxx 我尝试使用wildcard和patsubst使我的Makefile看起

我已经核对并阅读了所有答案,我可能应该这样做。我尝试添加一个选项卡并检查空格。但是,我在运行
make
时仍然会出错

下面是我的工作树:

$tree
.
├── 箱子
├── 铜
│   └── 内核gpu.cu
├── 股份有限公司
│   └── kernel.h
├── 生成文件
├── obj
│   ├── 内核&gpu.o
│   └── 梅因
└── src
├── kernel.cxx
└── main.cxx
我尝试使用
wildcard
patsubst
使我的
Makefile
看起来不错。 这是我的
Makefile

DIR_INC=./INC
DIR_SRC=./SRC
方向(CU)=./CU
方向/对象=/对象
DIR_BIN=/BIN
SRC=$(通配符${DIR\u SRC}/*.cxx)
SRC_CU=$(通配符${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}
目标=测试
CXX=g++
CU=nvcc
CUDA_安装_路径=/usr/local/CUDA
CUDAFLAGS=-O2-I.-I$(CUDA\u安装路径)/include-I${DIR\u INC}
LDFLAGS=-L$(CUDA安装路径)/lib64-lcudart
${OBJ}:${SRC}
$(CXX)$(CUDAFLAGS)-c$<-o$@
$(CUOBJ):$(SRC_CU)
$(CU)$(CUDAFLAGS)-o$@-c$<
${BIN_TARGET}:${DIR_OBJ}/%.o
$(CXX)$<-o$@${LDFLAGS}
.假冒:干净
清洁:
查找${DIR_OBJ}-name*.o-exec rm-rf{}\;
在shell中键入
make
时,我总是收到相同的错误消息:

$ make
Makefile:45: *** missing separator.  Stop.
第45行是:

44 ${OBJ}:${SRC}
45     $(CXX) $(CUDAFLAGS) -c $< -o $@

您需要用硬标签替换这四个空格


如果您正在使用某种编辑器,将硬制表符替换为空格,则需要禁用该编辑器或使用其他编辑器。

您需要将这四个空格替换为硬制表符


如果您使用的编辑器将硬制表符替换为空格,则需要禁用该编辑器或使用其他编辑器。

第45行必须以制表符开头。请粘贴到
cat-e-t-v Makefile
的输出中,以便我们验证制表符是否正确。抱歉!选中的!你说得对,非常感谢。makefiles语法的这一方面经常受到批评;如果您希望仅限于GNU make 4.0及以上版本,它被描述为[…]Unix历史上最糟糕的设计错误之一,您可以使用
.RECIPEPREFIX
来避免此问题:第45行必须以制表符开头。请粘贴到
cat-e-t-v Makefile
的输出中,以便我们可以验证制表符是否正确。抱歉!选中的!你说得对,非常感谢。makefiles语法的这一方面经常受到批评;它被描述为“Unix历史上最糟糕的设计错误之一”。如果您希望仅限于GNU make 4.0及以上版本,您可以使用
.RECIPEPREFIX
来避免此问题:已解决,非常感谢。@ShangKe请重新投票,并单击灰色复选标记接受答案,如果它对您有帮助。已解决,非常感谢。@ShangKe请对答案进行投票,如果有帮助,请单击灰色复选标记接受答案。
./src/main.cxx ./src/kernel.cxx
./obj/main.o ./obj/kernel.o