makefile - 是什么在下面的代码中使 makefile 错误?
问题描述
我在第 98 行收到错误,我不明白为什么会发生此错误。
makefile:98: *** mixed implicit and normal rules. Stop.
以下是第 98 行的代码行
$(SRC_C_OBJS): | $(OBJ_DIR)
以下是使用上述变量的代码:
OBJ_DIR = .\build
_C_SRCS = $(PROGRAM)_i.c \
test_$(PROGRAM).c
_ASM_SRCS = $(PROGRAM).S
_REF_C_SRCS = $(PROGRAM)_c.c \
test_$(PROGRAM).c
REF_OBJS = $(_REF_C_SRCS:%.c=$(REF_OBJ_DIR)\%.o)
SRC_C_OBJS = $(_C_SRCS:%.c=$(OBJ_DIR)\%.o)
SRC_ASM_OBJS = $(_ASM_SRCS:%.S=$(OBJ_DIR)\%.obj)
SRC_C_OBJS += $(OBJ_DIR)/subsys.o
$(EXEC): $(SRC_C_OBJS) $(SRC_ASM_OBJS)
$(LD) $(LDFLAGS) -o $@ $(SRC_C_OBJS) $(SRC_ASM_OBJS) $(LLIBS)
解决方案
REF_OBJS = $(_REF_C_SRCS:%.c=$(REF_OBJ_DIR)\%.o) SRC_C_OBJS = $(_C_SRCS:%.c=$(OBJ_DIR)\%.o) SRC_ASM_OBJS = $(_ASM_SRCS:%.S=$(OBJ_DIR)\%.obj)
The\%
正在转义%
,因此它被解释为文字%
,而不是替换的字符串。/
是 unix 平台上的目录分隔符,而不是\
. 你要:
OBJ_DIR = ./build
REF_OBJS = $(_REF_C_SRCS:%.c=$(REF_OBJ_DIR)/%.o)
SRC_C_OBJS = $(_C_SRCS:%.c=$(OBJ_DIR)/%.o)
SRC_ASM_OBJS = $(_ASM_SRCS:%.S=$(OBJ_DIR)/%.obj)
理论上,如果\
是分隔符,你可以这样做:
REF_OBJS = $(_REF_C_SRCS:%.c=$(REF_OBJ_DIR)\\%.o)
SRC_C_OBJS = $(_C_SRCS:%.c=$(OBJ_DIR)\\%.o)
SRC_ASM_OBJS = $(_ASM_SRCS:%.S=$(OBJ_DIR)\\%.obj)\
推荐阅读
- javascript - 如何使用 JavaScript 中的函数来转换温度
- system-verilog - 为什么即使使用种子(int 或任何其他)作为变量,$urandom 也会给出相同的值?
- python - 如何使用 pytest 测试视图,其视图具有 LoginRequired 和一些特定的用户依赖项
- laravel - Laravel Nova 只能从特定守卫访问
- sql - 通过 SQL 查询或函数获取依赖对象列表
- android - 设置通知音量
- powershell - 如何在 ubuntu 16.04 上使用 ansible 安装 powershell、powercli、powernsx
- apache - .htaccess 拒绝访问图像的文件夹,但允许访问查看图像
- node.js - 在客户端获取当前的 windows 用户
- python - 无法使用 djongo“数组模型字段”将数据添加到 MongoDB