gcc - GCC Makefile 错误:没有规则来制作“straps.o”所需的目标“put.h”。停止
问题描述
我正在尝试使用 make run 运行我的 makefile,但它出现了一些错误:“没有规则来制作目标 'put.h','straps.o' 需要。停止”。错误是关于 GCC 在使用以下文本运行 makefile 时找不到头文件(put.h):
在内核目录的 Makefile 中
VPATH=../../include
all : straps.o entry.o head.o
straps.o : straps.c put.h
$(GCC) -c straps.c $(CFLAG)
entry.o : entry.S
$(GCC) -c entry.S $(CFLAG)
head.o : head.S
$(GCC) -c head.S $(CFLAG)
(straps.c 包含“put.h”所以我需要包含 put.h)我试图在 gcc 命令行中包含头文件(通过使用 $(GCC) -c straps.c $(CFLAG) -I. ./include) 但仍然无法正常工作。谁能解释我为什么会收到此错误并在可能的情况下建议修复解决方案。谢谢
我的档案清单
Linux
├── arch
│ └── riscv
│ ├── kernel
│ │ ├── entry.S
│ │ ├── head.S
│ │ ├── Makefile
│ │ ├── straps.c
│ │ └── vmlinux.lds
│ └── Makefile
├── include
│ ├── put.h
│ └── test.h
├── init
│ ├── main.c
│ ├── Makefile
│ └── test.c
├── lib
│ ├── Makefile
│ └── put.c
└── Makefile
Main Makefile 给出的变量如下:
export
CROSS_= riscv64-unknown-elf-
AR=${CROSS_}ar
GCC=${CROSS_}gcc
LD=${CROSS_}ld
OBJCOPY=${CROSS_}objcopy
ISA ?= rv64imafd
ABI ?= lp64
INCLUDE = -I ../include
CF = -g -O3 -march=$(ISA) -mabi=$(ABI) -mcmodel=medany -ffunction-sections -fdata-sections -nostartfiles -nostdlib -nostdinc -static -lgcc -Wl,--nmagic -Wl,--gc-sections
CFLAG = ${CF} ${INCLUDE}
***解决方案:内核目录的Makefile更新如下(参考下面帖子中给出的答案):
VPATH = ../../../include
CFLAG += -I../../../include
all : straps.o entry.o head.o
straps.o : straps.c put.h
$(GCC) -c straps.c $(CFLAG)
entry.o : entry.S
$(GCC) -c entry.S $(CFLAG)
head.o : head.S
$(GCC) -c head.S $(CFLAG)
解决方案
我认为您假设这VPATH
与编译器如何定位头文件有关。绝对不是这样的。 VPATH
是一个make构造,并控制make在哪里查找 makefile 中出现的目标的先决条件。
它与编译器查找预处理器包含文件的位置完全无关。要控制它,您必须向-I
编译行添加选项。
所以例如使用:
VPATH = ../../../include
CFLAG += -I../../../include
推荐阅读
- android - 具有可聚焦元素的嵌套 RecyclerViews java.lang.IllegalArgumentException:参数必须是此视图的后代
- c# - C# Win 表单无法打开
- java - 如何在 Maven 构建模块期间从文件系统中读取文件
- reactjs - 在 react.js 中创建多个电子邮件字段输入
- php - 使用 Eloquent 链接 Laravel 中的多个表
- elasticsearch - 带有过滤器的日期直方图聚合问题
- bootbox - bootbox 确认对话框,取消按钮不起作用
- c++ - 从多个 MPI 进程调用 cudaMemcpy 的最可靠方法是什么?
- scala - YARN、Kafka 上的 Flink 会话窗口缩放问题
- sql - 计算每行数据库的 Biz 天数