Boost 聪明的链接器依赖性

Boost 聪明的链接器依赖性,boost,linker,makefile,Boost,Linker,Makefile,我的项目是用make编译的,最近添加了用于单元测试的boost库 目录结构如下: Project/ main.cpp main.hpp Makefile sources/ classA.cpp includes/ classA.hpp objects/ test/ Makefile unit_test_classA.cpp 在我运行的文件夹Project目录中: $ make test 除了我不知道如何告诉make运行test/Ma

我的项目是用make编译的,最近添加了用于单元测试的boost库

目录结构如下:

Project/
  main.cpp
  main.hpp
  Makefile
  sources/
    classA.cpp
  includes/
    classA.hpp
  objects/
  test/
    Makefile
    unit_test_classA.cpp
在我运行的文件夹
Project
目录中:

$ make test
除了我不知道如何告诉make运行
test/Makefile
并自动在
。/object
目录中查找依赖项之外,其他一切都正常

我试图使makefile保持通用性,因为我构建了许多对象,并且希望将开发和测试分开


问题是:我需要一个makefile规则来自动将.o文件查找到特定目录中
生成文件
#项目/生成文件
建造=蛇
LDFLAGS=
LDLIBS=-lsfml图形-lsfml窗口-lsfml音频-lsfml系统
CXXFLAGS=-Wall-I./包括
RM=RM-rf
OBJ_DIR=对象/
SRC_DIR=源/
OBJS=$(patsubst$(SRC_DIR)%\
$(对象目录)%\
$(patsubst%.cpp,%.o,$(通配符$(SRC_DIR)*.cpp)))
OBJECTS=main.o$(OBJS)
全部:$(构建)
测试:
cd试验$(制造)
$(生成):$(对象)
$(CXX)$(LDFLAGS)$(LDLIBS)$(对象)-o$@
$(OBJ_目录)%.o:$(SRC_目录)%.cpp$(OBJ_目录)
$(CXX)$(CXXFLAGS)-c$<-o$@
清洁:
$(RM)$(对象)$(对象目录)
mkdir$(OBJ_DIR)
冒牌货:测试

#项目/测试/生成文件
BUILD=boost\u测试
LDFLAGS=
LDLIBS=-lboost\u unit\u test\u framework
CXXFLAGS=-Wall-I./../includes
RM=RM-rf
OBJS=$(patsubst%.cpp、%.o、$(通配符*.cpp))
对象=$(OBJS)
全部:清洁$(构建)
./$(构建)
$(生成):$(对象)
$(CXX)$(LDFLAGS)$(LDLIBS)$(对象)-o$@
%.o:%.cpp
$(CXX)$(CXXFLAGS)-c$<-o$@
清洁:
$(RM)$(对象)
.PHONY:$(构建)

你的问题有点不清楚。当您使用
Project/Makefile
Project
中运行Make时(对于某些目标),您希望它使用
Project/test/Makefile
启动第二个Make进程吗?您希望它在
项目/test/
中的何处运行?然后您希望
Project/test/Makefile
Project/objects
中查找对象文件,是吗?不是。当我运行测试时,Makefile需要在Project/Makefile中构建依赖项,但只需要他需要的
# Project/Makefile

BUILD = snake

LDFLAGS =
LDLIBS = -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
CXXFLAGS = -Wall -I./includes
RM = rm -rf

OBJ_DIR = objects/
SRC_DIR = sources/

OBJS = $(patsubst $(SRC_DIR)%, \
    $(OBJ_DIR)%, \
    $(patsubst %.cpp,%.o,$(wildcard $(SRC_DIR)*.cpp)))

OBJECTS =  main.o $(OBJS)

all: $(BUILD)

test:
    cd test; $(MAKE)

$(BUILD): $(OBJECTS)
    $(CXX) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@

$(OBJ_DIR)%.o: $(SRC_DIR)%.cpp $(OBJ_DIR)
    $(CXX) $(CXXFLAGS) -c $< -o $@

clean:
    $(RM) $(OBJECTS) $(OBJ_DIR)
    mkdir $(OBJ_DIR)

.PHONY: test
# Project/test/Makefile

BUILD = boost_test

LDFLAGS =
LDLIBS = -lboost_unit_test_framework
CXXFLAGS = -Wall -I./../includes
RM = rm -rf

OBJS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))

OBJECTS = $(OBJS)

all: clean $(BUILD)
    ./$(BUILD)

$(BUILD): $(OBJECTS)
    $(CXX) $(LDFLAGS) $(LDLIBS) $(OBJECTS) -o $@

%.o: %.cpp
    $(CXX) $(CXXFLAGS) -c $< -o $@

clean:
    $(RM) $(OBJECTS)

.PHONY: $(BUILD)