制作:没有实现目标的规则 - 找不到源文件
Make: No rule to make target -- Cannot find source files
我有一个带有以下目录结构的项目
.
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中的makefile位置。我想使用我从QEMU主机和SystemC模型之间的演示中移植的Xilinx Systemc模型。我虽然构建它很难。
[jfrye@cserh4 adder_pl] $ make
make:警告:文件" makefile"的修改时间10229 s 未来
制作:***没有规则
/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o', needed by
adder_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/adder_pl/obj/remote-port-port-tlm-memory-master.o 是我不明白为什么它在第二个规则上失败了,我认为这意味着它也会使第三个规则失败。
我从另一个示例中移植了它。$@和$&lt;意思是?也许它们是问题的根源。
您的问题是需要/home/epi/jfrye_xilinx/Cosimulation/Adder_PL/obj/remote-port-tlm-memory-master.o
,但没有规则来构建它。这意味着目标模式:
$(XILINX_OBJ_DIR)/%.o: $(XILINX_SRC_DIR)/%.cc
确实匹配了目标和源。这可能是因为XILINX_OBJ_DIR
从未定义。添加行:
$(info XILINX_OBJ_DIR=$(XILINX_OBJ_DIR))
$(info XILINX_OBJ_DIR=$(XILINX_SRC_DIR))
就在您的#rules
行之前,然后重新运行这些变量扩展到。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- vcpkg 添加新库,但找不到
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 制作:没有实现目标的规则 - 找不到源文件