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
相关产品推荐
相关产品推荐

