首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >制作:没有规则要设定目标--找不到源文件

制作:没有规则要设定目标--找不到源文件
EN

Stack Overflow用户
提问于 2017-12-14 18:14:16
回答 1查看 1.3K关注 0票数 0

我有一个具有以下目录结构的项目

代码语言:javascript
运行
复制
.
 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

生成文件位于Adder_PL中的位置。我想使用我在QEMU主机和SystemC模型之间从它们的演示中移植的Xilinx SystemC模型。不过,我在建造它的时候遇到了困难。

jfrye@cserh4 4 Adder_PL$ make 警告:文件Makefile' has modification time 10229 s in the future make: \*\*\* No rule to make target/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o',所需的“加法器_pl”。停止播放。

这是Makefile

代码语言:javascript
运行
复制
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,但我不明白它为什么在第二条规则上失败,我假设这意味着如果它能够实现它,它也会失败第三条规则。

我是从另一个例子移植的。$@和$<是什么意思?也许他们才是问题的根源。

EN

回答 1

Stack Overflow用户

发布于 2017-12-14 21:59:39

您的问题是/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o是必需的,但是Make没有构建它的规则。这意味着,目标模式:

代码语言:javascript
运行
复制
$(XILINX_OBJ_DIR)/%.o: $(XILINX_SRC_DIR)/%.cc

确实匹配了目标和源。这很可能是因为从未定义过XILINX_OBJ_DIR。增加以下几行:

代码语言:javascript
运行
复制
$(info XILINX_OBJ_DIR=$(XILINX_OBJ_DIR))
$(info XILINX_OBJ_DIR=$(XILINX_SRC_DIR))

就在makefile中的#rules行之前,重新运行以查看这些变量扩展到什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47819716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档