【发布时间】:2017-12-14 18:14:16
【问题描述】:
我有一个目录结构如下的项目
.
Adder_PL
bin
main.cc
Makefile
obj
SystemC
my_models
include
add.h
lib
add.cpp
Xilinx
include
amba.h
debugdev.h
demo-dma.h
genattr.h
iconnect.h
memory.h
remote-port-proto.h
remote-port-sk.h
remote-port-tlm.h
remote-port-tlm-memory-master.h
remote-port-tlm-memory-slave.h
remote-port-tlm-wires.h
safeio.h
tlm2apb-bridge.h
tlm2axi-bridge.h
tlm2axilite-bridge.h
trace.h
xilinx-zynq.h
xilinx-zynqmp.h
lib
debugdev.cc
demo-dma.cc
memory.cc
remote-port-tlm.cc
remote-port-tlm-memory-master.cc
remote-port-tlm-memory-slave.cc
remote-port-tlm-wires.cc
trace.cc
xilinx-zynq.cc
xilinx-zynqmp.cc
Makefile 在 Adder_PL 中的位置。我想使用我从他们的演示中移植到 QEMU 主机和 SystemC 模型之间的 Xilinx SystemC 模型。不过我在构建它时遇到了麻烦。
[jfrye@cserh4 Adder_PL]$ 制作
make:警告:文件“Makefile”的修改时间为 10229 秒 未来
make: *** 没有制定目标的规则
/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o', needed byadder_pl'。停下来。
这是 Makefile
CXX=g++
EXEC=./bin/adder_pl
#directories
XILINX_DIR=/home/epi/jfrye_xilinx/Cosimulation/SystemC/Xilinx
MY_MODELS_DIR=/home/epi/jfrye_xilinx/Cosimulation/SystemC/my_models
SYSTEMC_DIR=/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2
OBJ_DIR=/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/
#includes
XILINX_INC=$(XILINX_DIR)/include
MY_MODELS_INC=$(MY_MODELS_DIR)/include
SYSTEMC_INC=$(SYSTEMC_DIR)/include
INC=-I$(XILINX_INC) -I$(MY_MODELS_INC) -I$(SYSTEMC_INC)
#libs
LIB=-L/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/lib-linux64
LIBS=-lsystemc
#src and obj
XILINX_SRC_DIR=$(XILINX_DIR)/lib
MY_MODELS_SRC_DIR=$(MY_MODELS_DIR)/lib
XILINX_SRC=$(wildcard $(XILINX_SRC_DIR)/*.cc)
XILINX_OBJ=$(patsubst $(XILINX_SRC_DIR)/%.cc, $(OBJ_DIR)%.o, $(XILINX_SRC))
MY_MODELS_SRC=$(wildcard $(MY_MODELS_SRC_DIR)/*.cc)
MY_MODELS_OBJ=$(patsubst $(MY_MODELS_SRC_DIR)/%.cc, $(OBJ_DIR)/%.o, $(MY_MODELS_SRC))
MAIN_OBJ=$(OBJ_DIR)/main.o
#all objects
OBJS = $(XILINX_OBJ) $(MY_MODELS_OBJ) $(MAIN_OBJ)
#rules
adder_pl: $(OBJS)
$(CXX) -o $(EXEC) $(OBJS) $(INC) $(LIB) $(LIBS)
$(XILINX_OBJ_DIR)/%.o: $(XILINX_SRC_DIR)/%.cc
$(CXX) $(INC) $(LIB) $(LIBS) -c -o $@ $<
$(MY_MODELS_OBJ_DIR)/%.o: $(MY_MODELS_SRC_DIR)/%.cc
$(CXX) $(INC) $(LIB) $(LIBS) -c -o $@ $<
$(MAIN_OBJ): main.cc
$(CXX) $(INC) $(LIB) $(LIBS) -c main.cc -o $(MAIN_OBJ)
.PHONY: clean
clean:
rm $(XILINX_OBJ_DIR)/*.o $(MY_MODELS_OBJ_DIR)/*.o $(EXEC)
显然,我正在正确构建 $(OBJS),因为它正在尝试创建 /home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o 但我不明白为什么它在第二条规则上失败了,我假设这意味着如果它可以达到第三条规则,它也会失败。
我从另一个例子移植了这个。 $@ 和 $
【问题讨论】:
-
检查
$@和$<( here ) 的 make 文档。这些不是你的问题。