Makefile 在生成文件中找不到包含

Makefile 在生成文件中找不到包含,makefile,gnu-make,include-path,Makefile,Gnu Make,Include Path,我已经在这个makefile上工作了很长一段时间了,我找不到解决问题的方法。以下是生成文件: # Compiler: CPPFLAGS = $(OPT_FLAGS) $(DEBUG_FLAGS) $(STANDARD_FLAGS) \ $(WARN_AS_ERRORS_FLAGS) # Source files, headers, etc.: OBJ_DIR = $(CX_BUILD_ROOT)/tests/unit OUT_DIR = $(CX_BU

我已经在这个makefile上工作了很长一段时间了,我找不到解决问题的方法。以下是生成文件:

# Compiler:
CPPFLAGS = $(OPT_FLAGS) $(DEBUG_FLAGS) $(STANDARD_FLAGS) \
           $(WARN_AS_ERRORS_FLAGS)

# Source files, headers, etc.:
OBJ_DIR      = $(CX_BUILD_ROOT)/tests/unit
OUT_DIR      = $(CX_BUILD_ROOT)/tests/unit
INCLUDES     = -I$(CX_SRC_ROOT)/cXbase/publicAPI
LIBINCLUDES  = -L$(CX_BUILD_ROOT)/connectx/libs
VPATH        = tests

SRCS      = cxUnitTests.cpp\
            test_Player.cpp\
            test_Name.cpp\
            test_Game.cpp\
            test_GameBoard.cpp\
            test_Disc.cpp\
            test_Color.cpp\
            test_AsciiColorCode.cpp\

OBJS      = test_Player.o\
            test_Name.o\
            test_Game.o\
            test_GameBoard.o\
            test_Disc.o\
            test_Color.o\
            test_AsciiColorCode.o\

LIBS      = -lgtest\
            -lgtest_main\
            -lpthread\
            -lcXbase

# Product:
MAIN = cxUnitTests.out


all: make_dir $(MAIN)

$(MAIN): $(OBJS)
    @echo Invoquing GCC...
    $(CPPC) $(LIBINCLUDES) -o $(OUT_DIR)/$(MAIN) $(OBJS) $(LIBS)
    @echo $(MAIN) has been compiled and linked!

$(OBJ_DIR)/%.o: %.cpp
    @echo Invoquing GCC...
    $(CPPC) $(CPPFLAGS) $(INCLUDES) -c $< -o $@
    @echo Object files created!

make_dir:
    mkdir -p $(OBJ_DIR)
    mkdir -p $(OUT_DIR)

clean:
    @echo Removing object files...
    $(RM) $(OBJ_DIR)/*.o
    @echo Object files removed!

mrproper: clean
    @echo Cleaning project...
    $(RM) $(OUT_DIR)/$(MAIN)
    @echo Project cleaned!

depend: $(SRCS)
    @echo Finding dependencies...
    makedepend $(INCLUDES) $^
    @echo Dependencies found!
#编译器:
CPPFLAGS=$(选择标记)$(调试标记)$(标准标记)\
$(警告作为错误标志)
#源文件、标题等:
OBJ_DIR=$(CX_构建_根)/测试/单元
OUT\u DIR=$(CX\u构建\u根)/测试/单元
INCLUDES=-I$(CX\u SRC\u ROOT)/cXbase/publicAPI
LIBINCLUDES=-L$(CX\u BUILD\u ROOT)/connectx/libs
VPATH=测试
SRCS=cxUnitTests.cpp\
test_Player.cpp\
test_Name.cpp\
test_Game.cpp\
test_GameBoard.cpp\
test_Disc.cpp\
test_Color.cpp\
test_asciolorCode.cpp\
OBJS=test_Player.o\
测试名称\
测试游戏\
test_GameBoard.o\
测试盘\
测试颜色\
测试颜色代码\
LIBS=-lgtest\
-LGU总管\
-lpthread\
-lcXbase
#产品:
MAIN=cxUnitTests.out
全部:make_dir$(主)
$(主):$(OBJS)
@echo发票GCC。。。
$(CPPC)$(LIBINCLUDES)-o$(OUT_DIR)/$(MAIN)$(OBJS)$(LIBS)
@echo$(MAIN)已编译并链接!
$(对象目录)/%.o:%.cpp
@echo发票GCC。。。
$(CPPC)$(CPPFLAGS)$(包括)-c$<-o$@
@创建回显对象文件!
制作目录:
mkdir-p$(OBJ_DIR)
mkdir-p$(输出目录)
清洁:
@正在删除目标文件。。。
$(RM)$(OBJ_DIR)/*.o
@回声对象文件删除!
正确:清洁
@回声清理项目。。。
$(RM)$(输出目录)/$(主目录)
@回声项目清理!
依赖:$(SRC)
@回音查找依赖项。。。
MakeDependent$(包括)$^
@找到回声依赖项!
“源文件、标题等”部分中的所有值都是在其他makefiles中定义的,通过
$(MAKE)-C
选项可以从这些makefiles中调用该makefile。它们都可以
@echo
编辑,结果值良好。当我运行
make
时,我得到:

g++-g3-std=c++0x-pedantic errors-Wall-Wextra-Werror-Wconversion-c-o test\u Player.o tests/test\u Player.cpp

tests/test\u Player.cpp:36:30:致命错误:publicAPI/Player.h:没有这样的文件或目录

由于某种原因,
make
似乎无法访问
INCLUDES
变量的内容。我使用Gnu make

你能看出哪里出了问题吗


关于

使是使用其内置规则编译C++文件,因为您的模式规则<代码> $(ObjyDIr)/%.O:%.CPP 与您的对象列表不匹配。巧合的是,您使用了内置配方使用的一个变量(
CPPFLAGS
),但是make没有使用
INCLUDES

解决这个问题的一种方法是在对象列表之后添加如下内容

OBJS := $(addprefix $(OBJ_DIR)/,$(OBJS))

我终于找到了问题所在。事实上,有两个:

  • INCLUDES
    变量应设置为
    $(CX\u SRC\u ROOT)/cXbase
    而不是
    $(CX\u SRC\u ROOT)/cXbase/publicAPI
    因为,如错误消息所示,
    Player的include文件
    在
    publicAPI/Player.h中查找,所以
    publicAPI
    在那里 两次,但在
    @echo
    中未显示两次
  • 我的对象列表的格式应该是:
    $(OBJ_DIR)/objectFile.o

  • 您的解决方案有效且更加优雅。我会接受的。