配置内核 Makefile:1449: *** mixed implicit and normal rules. Stop.

本文介绍了解决在Fedora15中编译内核时出现的“混合的和隐含普通规则”错误的方法。通过修改特定行的Makefile规则,使新版make工具能够兼容旧版编译规则。
在编译内核的时候提示Makefile:1449: *** mixed implicit and normal rules.  Stop.

         在网上查找后得到如下原因:

翻译为中文:混合的和隐含普通规则

         
        是由于我的系统的make工具太新(系统:fedora15),make的旧版规则已经无法兼容新版。按照以下方式,问题得到解决:

         修改前:416行 config %config: scripts_basic outputmakefile FORCE

         修改后:416 行 %config: scripts_basic outputmakefile FORCE
        
         修改前:1449 行 / %/: prepare scripts FORCE

         修改后:1449 行 %/: prepare scripts FORCE

   

附网上其他的解决方案:

降低make工具的版本:Fedora 14下建立 omap3530 开发环境(转

本文所采用的方法:http://blog.youkuaiyun.com/fengyaqi123/article/details/7873940

### Makefile混合隐式规则静态模式规则错误的解决方案 在 Makefile 的设计中,混合使用隐式规则静态模式规则可能会导致冲突或错误。这种问题通常出现在目标文件同时被隐式规则静态模式规则定义时[^1]。GNU Make 在解析规则时,会优先匹配隐式规则,但如果存在静态模式规则,则可能导致规则之间的冲突。 以下是一个示例,展示如何避免此类错误: #### 示例 Makefile ```makefile # 隐式规则 %.o: %.c gcc -c $< -o $@ # 静态模式规则 objects = foo.o bar.o $(objects): %.o: %.cpp g++ -c $< -o $@ ``` 上述 Makefile 中,`foo.o` `bar.o` 同时由隐式规则静态模式规则定义。这会导致冲突,因为 GNU Make 不知道应该选择哪条规则来生成目标文件。 #### 解决方案 为了解决这个问题,可以明确区分隐式规则静态模式规则的作用范围。例如,将静态模式规则的目标文件与隐式规则的目标文件分开处理。以下是修正后的 Makefile: ```makefile # 定义 C 文件的目标 C_FILES := $(wildcard *.c) C_OBJECTS := $(C_FILES:.c=.o) # 定义 C++ 文件的目标 CPP_FILES := $(wildcard *.cpp) CPP_OBJECTS := $(CPP_FILES:.cpp=.o) # 隐式规则 %.o: %.c gcc -c $< -o $@ # 静态模式规则 $(CPP_OBJECTS): %.o: %.cpp g++ -c $< -o $@ all: $(C_OBJECTS) $(CPP_OBJECTS) ``` 在这个修正版本中,通过明确区分 C 文件 C++ 文件的目标文件,避免了隐式规则静态模式规则之间的冲突。 #### 注意事项 - 如果需要对特定文件应用特殊规则,建议使用显式规则而不是静态模式规则。 - 使用 `$(wildcard)` 函数可以帮助动态生成目标文件列表,从而减少手动维护的工作量[^1]。 ### 代码示例 以下是一个更复杂的 Makefile 示例,展示了如何正确混合使用隐式规则静态模式规则: ```makefile # 定义源文件目标文件 SRCS := $(wildcard *.c) $(wildcard *.cpp) OBJS := $(SRCS:.c=.o) $(SRCS:.cpp=.o) # 隐式规则 %.o: %.c gcc -c $< -o $@ # 静态模式规则 $(filter %.o, $(OBJS)): %.o: %.cpp g++ -c $< -o $@ all: $(OBJS) clean: rm -f $(OBJS) ``` 在这个例子中,`$(filter)` 函数用于筛选出需要应用静态模式规则的目标文件,从而避免规则冲突[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值