博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
阅读量:4285 次
发布时间:2019-05-27

本文共 844 字,大约阅读时间需要 2 分钟。

   最近在整windows 下的gcc 工具链编译,发现bat 调用make -j4 会有如下警告

warning: jobserver unavailable: using -j1. Add `+' to parent make rule,以为是windows 下make 不支持多核编译的原因,但是今天我把同一份代码放到ubuntu下 编译,一样的警告,并且ubuntu 编译别的Linux code 是没有问题的,搜索网络文章,众说纷纭。

不过有人说是Makefile 写的不合理,依赖比较散乱,导致make 没法多进程编译?我觉得这个有道理啊。

比如说上层模块是a,有三个子模块b, c, d

报错是在生成a的目标文件时缺少b的目标文件,而在报错后编译才进入b的目录编译b模块。
貌似是有个make子进程专门负责生成a目标文件,其他进程编译子模块b,c,d。本来应该是
b, c, d都编译完了,再生成a。现在成了b,c, d还没编译,就执行了生成a的规则。
      那些说把make 替换为$(MAKE)可以解决的确认是不可行的,这个问题更深层次的原因,后面我一定要找到。

      经过分析代码,觉得有如下可能:

在父目录的Makefile中export出变量,比如export CFLAGS

在父目录的Makefile中make -C child_dir 就能去寻找子目录中的Makefile并进行编译
make -j4的时候向子Makefile编译的时候出现问题 
make[1]: warning: jobserver unavailable: using -j1. Add `+’ to parent make rule. 
因为子的Makefile中没有make命令,只有${CC}命令,此时make不能实现多线程编译。 
解决的办法是在编译这个子Makefile的时候使用+make -C child_dir
      的确,子目录没再出现过make 了,如果不存在子目录的话那就真的不会出现这种情况。
 

转载地址:http://hkpgi.baihongyu.com/

你可能感兴趣的文章
各浏览器的用户代理字符串整理
查看>>
Visual Studio Code v1.17发布
查看>>
EF Linq字符串模糊查询整理
查看>>
Bootstrap 模态框垂直居中处理
查看>>
Visual Studio Code v1.18发布
查看>>
Ionic2 相关文档整理
查看>>
Angular CLI简介
查看>>
Angular CLI简介2
查看>>
Angular2开发环境搭建之VS Code
查看>>
Angular 安全导航操作符(?.)和空属性路径
查看>>
Angular管道操作符(|)
查看>>
Angular模板引用变量(#var)
查看>>
Angular 内置结构型指令
查看>>
Angular 内置属性型指令
查看>>
cookie 跨域访问整理
查看>>
Angular中的模板和表达式简介
查看>>
Angular 绑定语法简介
查看>>
Ionic创建项目失败:[ERROR] Network connectivity error occurred, are you offline?
查看>>
Visual Studio Code v1.19发布
查看>>
Cordova 卸载
查看>>