内核编译出错:multiple target patterns

本文记录了一次解决Linux内核编译过程中出现的make多重目标模式错误的经历。通过删除特定文件并重新编译,成功解决了编译问题。
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czjujoe%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

现象

svn 仓库check out 一份内核, 然后make (该配置内置了initramfs 文件系统),第一次make 成功, 但是此后再也不行了!make , make clean 等后都会出错。给开发带来极大麻烦。

 

出错信息如下:

20081007_kernel>make

  CHK     include/linux/version.h

make[1]: `include/asm-arm/mach-types.h' is up to date.

  CHK     include/linux/utsrelease.h

  CHK     include/linux/compile.h

/home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel/usr/Makefile:41: *** multiple target patterns.  Stop.

make: *** [usr] Error 2

 

20081007_kernel>make clean

  CLEAN   arch/arm/boot/compressed

  CLEAN   arch/arm/boot

  CLEAN   /home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel

  CLEAN   arch/arm/kernel

  CLEAN   drivers/char

  CLEAN   init

  CLEAN   lib

/home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel/usr/Makefile:41: *** multiple target patterns.  Stop.

make: *** [_clean_usr] Error 2

 

20081007_kernel>make distclean

/home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel/usr/Makefile:41: *** multiple target patterns.  Stop.

make: *** [_clean_usr] Error 2

 

 

问题解决

(同时打算再仔细研究一下 Makefile 语法:P)

google 了一下, 查到文档:

http://www.ibm.com/developerworks/cn/linux/l-debugmake.html

 

该文档说make 时使用  -d 参数可以看到大量信息, 试着用 make –d, 最后几行:

This program built for i486-pc-linux-gnu

Reading makefiles...

Reading makefile `scripts/Makefile.build'...

Reading makefile `include/config/auto.conf' (search path) (don't care) (no ~ expansion)...

Reading makefile `scripts/Kbuild.include' (search path) (no ~ expansion)...

Reading makefile `/home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel/usr/Makefile' (search path) (no ~ expansion)...

Reading makefile `usr/.initramfs_data.cpio.gz.d' (search path) (no ~ expansion)...

/home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel/usr/Makefile:41: *** multiple target patterns.  Stop.

Reaping losing child 0x080af520 PID 6349

make: *** [usr] Error 2

Removing child 0x080af520 PID 6349 from chain.

 

看一下,usr/.initramfs_data.cpio.gz.d initramfs 的目录列表,

试着删除文件 usr/.initramfs_data.cpio.gz.d Make, 居然不出错了!!!

 

20081007_kernel>rm -f usr/.initramfs_data.cpio.gz.d

20081007_kernel>make

  CHK     include/linux/version.h

make[1]: `include/asm-arm/mach-types.h' is up to date.

  CHK     include/linux/utsrelease.h

  CHK     include/linux/compile.h

  MODPOST vmlinux

  Kernel: arch/arm/boot/Image is ready

  Kernel: arch/arm/boot/zImage is ready

  Building modules, stage 2.

  MODPOST 33 modules

`multiple target patterns. Stop.` 错误通常是由于 Makefile 中规则的目标模式存在问题导致的,一般是在同一规则中定义了多个目标模式,而 Make 工具无法处理这种情况。以下是一些可能的解决方法: ### 检查 Makefile.Debug 文件第 149 行 打开 `Makefile.Debug` 文件,定位到第 149 行,查看该行及其上下文,确认是否存在多个目标模式。例如,错误的 Makefile 规则可能如下: ```makefile target1 target2: dependency command ``` 在这种情况下,Make 工具会报错,因为它不知道如何处理多个目标模式。应该将其拆分为多个规则,例如: ```makefile target1: dependency command target2: dependency command ``` ### 检查 Qt 项目文件(.pro) `Makefile.Debug` 文件通常是由 Qt 的 `qmake` 工具生成的,而 `qmake` 根据项目文件(.pro)生成 Makefile。因此,需要检查项目文件中是否存在可能导致生成错误 Makefile 的配置。 例如,检查是否有重复的文件或目标定义。确保项目文件中的 `SOURCES`、`HEADERS`、`TARGET` 等变量没有重复或错误的定义。 ### 重新生成 Makefile 有时候,Makefile 可能因为某些原因生成错误。可以尝试删除 `Makefile.Debug` 文件,然后重新生成它。 首先,进入项目目录,执行以下命令删除 `Makefile.Debug` 文件: ```sh rm Makefile.Debug ``` 然后,使用 `qmake` 重新生成 Makefile: ```sh qmake -spec win32-g++ CONFIG+=debug ``` 最后,再次尝试编译项目: ```sh make -f Makefile.Debug ``` ### 检查 Qt 环境配置 确保 Qt 环境配置正确,特别是 `qmake` 和 `make` 工具的版本兼容性。可以尝试使用不同版本的 Qt 或 `qmake` 工具来生成 Makefile。 ### 检查文件路径和命名 确保项目文件和源文件的路径和命名没有问题,特别是在 Windows 系统中,要注意文件路径中的反斜杠(`\`)需要转义。 ### 示例代码 以下是一个简单的 Makefile 示例,展示了正确的规则定义: ```makefile # 目标文件 target: source.o g++ -o target source.o # 源文件编译规则 source.o: source.cpp g++ -c source.cpp ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值