Boost 聪明的链接器依赖性
我的项目是用make编译的,最近添加了用于单元测试的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
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)