makefile:不同目录中的CPP文件,将对象文件重定向为./obj,并且可执行到./bin
Makefile: Cpp Files in Different Directories, Redirect Object Files to ./obj and Executable to ./bin
我的目录结构看起来像
-Project
|--bin
|--obj/
|--class1
|--class1.h
|--class1.cpp
|--test
|--test-wrapper-class.h
|--test-wrapper-class.cpp
|--main.cpp
我想编写一个将会
的makefile1)创建三个对象文件,main.o,class1.o和test-wrapper-class.o,然后将这些文件放在OBJ目录
2)使用这些对象文件创建将放置在bin文件夹中的可执行文件
3)有一个干净,可以删除OBJ和bin中的所有文件
我知道如何创建对象文件。我已经看到了从位于同一目录中的所有CPP文件创建对象文件,然后将它们全部放置在OBJ目录中的示例。我不知道该怎么做是
1)从不同目录中的CPP源创建对象文件,将所有对象文件放在每个源目录的单独目录中
2)并使用这些对象文件创建位于对象文件和源的另一个目录中的可执行文件。
处于当前状态。我的makefile甚至没有接近工作。
CXX=g++
INC=-I/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/include ./test_bench/ ./src/
LIB=-L/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/lib-linux64
LIBS=-lsystemc
OBJDIR=obj
_OBJS = main.o test_bench.o
OBJS = $(addprefix $(OBJDIR), _OBJS)
all: $(OBJS)
$(CXX) $(OBJS) $(INC) $(LIB) $(LIBS) -o out
$(OBJDIR) obj/%.o : %.cpp test_bench.h
$(CXX) $(OBJS) $(INC) $(LIB) $(LIBS) $< -o $@
我认为我非常了解如何包括标头文件(库)目录以及如何包含链接器文件。我只是在汇编阶段移动文件,但我不太了解。
谢谢。
让我们从这个问题的简单版本开始:
src/
foo.cpp
bar.cpp
inc/
bar.h
obj/
bin/
我想在obj/
中构建foo.o
和bar.o
,foo.cpp
包括bar.h
(因此bar.h
应该是foo.o
和bar.o
的先决条件),我想将这些对象链接到bin/
中的app
。
技巧一个,使用目标的完整路径:
SRCDIR := src
INCDIR := inc
OBJDIR := obj
BINDIR := bin
OBJECTS:= $(addprefix $(OBJDIR)/, foo.o bar.o)
bin/app: $(OBJECTS)
$(CXX) $^ -o $@
$(OBJECTS): $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(CXX) -I$(INCDIR) $< -o $@
$(OBJDIR)/foo.o $(OBJDIR)/bar.o: $(INCDIR)/bar.h
现在让我们假设源位于一个以上的目录中,例如class1/
和test/
:
技巧2,使用vtath查找资源:
vpath %.cpp src
$(OBJECTS): $(OBJDIR)/%.o: %.cpp
$(CXX) -I$(INCDIR) $< -o $@
不要忘记clean
规则:
.PHONY: clean
clean:
@rm -fr $(BINDIR)/* $(OBJDIR)/*
其他改进是可能的,但这足以让您开始。
相关文章:
- 如何在.obj文件上运行IlDasm?
- 在 opengl 中渲染 obj 文件时出现黑窗口
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 正在读取 obj 文件!(指数)
- 可执行文件C++包括.obj,.lib和.dll吗?
- OBJ 文件C++与 ubuntu 问题
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- /usr/bin/ld: build-debug/obj/gpsitem.o: 文件无法识别: 文件被截断
- 将多个网格放入单个波前 OBJ 文件中
- :-1: 错误: LNK1104: 无法打开文件"我的项目.obj"
- Python 脚本到 c .obj 文件
- CMake:如何在包含的标头更改时自动重建 .obj 文件
- 如何读取 .obj 文件?
- LNK1104:无法打开文件"include.obj" - OpenCV
- makefile 没有将 .o 和可执行文件放在各自的 obj 和 bin 目录中
- C++生成器 10.2.3 [ilink32 错误] 致命:无法打开文件'FORMS.OBJ'
- ATL 链接器错误:无法打开输入文件 ****.obj
- 如何使项目共享中间文件(.obj)
- 在波前对象文件(.obj)中,我应该如何在opengl中渲染具有4个以上顶点的面
- 二进制文件 - obj(game) 保存并加载 obj