gpt4 book ai didi

c++ - Makefile:不同目录下的Cpp文件,目标文件重定向到./obj,可执行文件重定向到./bin

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:47 25 4
gpt4 key购买 nike

我的目录结构是这样的

-Project
|--bin
|--obj/
|--class1
|--class1.h
|--class1.cpp
|--test
|--test-wrapper-class.h
|--test-wrapper-class.cpp
|--main.cpp

我想写一个 Makefile

1) 创建三个目标文件,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.obar.ofoo.cpp包括bar.h(因此 bar.h 应该是 foo.obar.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/:

技巧二,使用vpath找源:

vpath %.cpp src

$(OBJECTS): $(OBJDIR)/%.o: %.cpp
$(CXX) -I$(INCDIR) $< -o $@

不要忘记一个clean规则:

.PHONY: clean
clean:
@rm -fr $(BINDIR)/* $(OBJDIR)/*

还可以进行其他改进,但这足以让您入门。

关于c++ - Makefile:不同目录下的Cpp文件,目标文件重定向到./obj,可执行文件重定向到./bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com