You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile中已定义的TESTSRC变量输出为空问题排查

Makefile中TESTSRC变量为空引发编译错误

Makefile目录变量结构

ROOTDIR = ~/path/to/proj
BLDDIR = $(ROOTDIR)/build
INCDIR = $(ROOTDIR)/include
SRCDIR = $(ROOTDIR)/src
LIBSRCDIR = $(SRCDIR)/lib
TESTSRCDIR = $(SRCDIR)/test
OBJDIR = $(ROOTDIR)/obj
LIBOBJDIR = $(OBJDIR)/lib
TESTOBJDIR = $(OBJDIR)/test
LIBDIR = $(ROOTDIR)/lib
BINDIR = $(ROOTDIR)/bin

文件定义部分

MKFILE = $(BLDDIR)/Makefile
HDRFILES = $(wildcard $(INCDIR)/*.hpp)
LIBSRCFILES := $(wildcard $(LIBSRCDIR)/*.cpp)
TESTSRC = $(TESTSCRCDIR)/test.cpp
LIBOBJFILES := $(patsubst $(LIBSRCDIR)/%.cpp, $(LIBOBJDIR)/%.o, $(LIBSRCFILES))
TESTOBJ := $(TESTOBJDIR)/test.o
LIBFILE = $(LIBDIR)/$(NAME)-$(VERSION).a
TESTFILE = $(BINDIR)/test
ZIPFILE = $(ROOTDIR)/$(NAME).$(VERSION).zip

问题现象与排查情况

其他变量均正常,但$(TESTSRC)输出为空,编译时触发错误:

make: *** No rule to make target '/test.cpp', needed by ..../test.o

其中..../test.o路径正确,且为独立定义,未依赖patsubst规则。

已确认:Make能正确识别所有目录、文件扩展名无误、变量未被覆盖。

解决方案

问题根源是变量拼写错误:定义测试源码目录的变量是TESTSRCDIR,但在TESTSRC中误写为TESTSCRCDIR(多了一个字母C)。

修正后的TESTSRC定义:

TESTSRC = $(TESTSRCDIR)/test.cpp

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:31:04