【发布时间】:2017-12-12 21:56:50
【问题描述】:
我的目录结构是这样的
-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 $@
我想我非常了解如何包含头文件(库)目录以及如何包含链接器文件。它只是在我不太了解的编译阶段移动文件。
谢谢。
【问题讨论】:
-
OBJS = $(addprefix $(OBJDIR), _OBJS)是语法错误,您还想将_OBJS放在$()中,因为没有它的字符串只是字符串本身,而不是变量内容。$(OBJDIR) obj/%.o也是错误的。你想说$(OBJDIR)/%.o。最后,将您的第一个目标命名为out而不是all。它会创建这个文件,因此无需将 make 和 reader 与不生成其目标的规则混淆。