【发布时间】:2015-10-13 14:39:46
【问题描述】:
我正在使用ndk-build 运行 Android NDK make 文件,这只是使用 google makefile 模板运行的普通 gnu make。我用ndk-build -j8 运行它,我可以确认make 命令行确实用-j8 运行
然而,编译继续一个一个地编译我的源文件,从不一次运行clang++。情况并非总是如此。就在几天前,我使用了完全相同的脚本,它使用了所有 8 个内核并且速度更快。
什么能让gnu一下子不尊重-j8?
有没有办法让 gnu make 产生任何关于此的解释性信息?各种 --debug 选项好像都没有讲到。
从 OSX 10.10.5 运行,gnu make 版本为 3.81
更新:如果我之前执行ndk-build clean,我之后立即执行的构建确实可以在所有 8 个内核上运行。返回后一天完成的后续构建仅使用 1 个核心
【问题讨论】:
-
我猜你的
Makefile中有一些奇怪的依赖。我们无法在看到之前回答您的问题。也许一些-included 文件会造成一些混乱。 -
顺便说一句,您真的应该将您的 GNU
make升级到 4.1 和/或使用 remake 或make --trace来调试此类问题;试试make clean和/或make distclean -
你的问题应该被关闭,因为这里双重偏离主题:没有显示代码(你应该显示你的
Makefile)但要求调试它以及更多关于superuser的主题 -
@BasileStarynkevitch,不同意基于off-topic关闭,make直接落入stackoverflow领域。但是,我们确实需要这里的代码示例。
-
正如其他人所说,没有代码就无法诊断发生了什么。但是,我猜没有并行编译,因为您引入了一个新的依赖链来阻止它。不会很明显。 ndk-build 包含文件在幕后做了一些棘手的事情。这与显示并行执行的干净构建一致,但不是增量构建。使用您的 vcs 将代码仓库临时回滚到几天前的位置以进行验证。然后看看你从那时起编码的内容。那个时期的某些事情是负责任的。
标签: c++ makefile android-ndk gnu-make