我正在尝试为我的源树设置基于CMAKE的构建,但是当我发行时

$ cmake .
$ make -j2

我得到:

jobserver unavailable: using -j1.  Add '+' to parent make rule

作为警告。有人知道是否有可能以某种方式修复它?

有帮助吗?

解决方案

看来这不是CMAKE问题,而是仅出现。

其他提示

在生成的makefile中,当打电话给子蛋糕时,需要使用$(make)(不仅仅是'make'),否则用a +在线之前。也就是说,规则应该像这样:

mysubdir:
    $(MAKE) -C mysubdir

或这样:

mysubdir:
    +make -C mysubdir

如果您不这样做这两种方式之一,则会给您警告。

我对Cmake一无所知,所以也许它会产生不正确的伪像。或者,也许您在尽头做了不正确的事情。

在我的情况下(与Cmake 3.5.2) cd build && cmake .. && make -j5 工作正常。

但是,我确实得到了 不可用的求职者 通过构建自定义目标(作为其他目标的依赖项)的错误 cmake --build . --target foo 成语。

像这样:

add_custom_target(buildroot
   COMMAND ${CMAKE_COMMAND} --build . --target install
   COMMENT "Populating buildroot..."
)
add_dependencies(deb buildroot)
add_dependencies(rpm buildroot) #... etc

- 以便用户可以 make deb 而且它只是有效的。 cmake将在需要时再生makefiles,运行汇编, install 一切都与 make install, ,然后运行我的自定义脚本以将填充的Buildroot包装到我需要的任何形状或形式中。

果然,我想 make -j15 deb - 但这失败了。


现在,为 解释了 在cmake devs的邮件列表上,gnu make中的根本原因是,令人惊讶的是(或没有);有解决方法。

根本原因是 make 不会将其工作人员环境传递给儿童流程,以为不是 make.

为了说明,这是一个过程树(ps -A f) 分支: … \_ bash \_ make -j15 deb \_ make -f CMakeFiles/Makefile2 deb \_ make -f CMakeFiles/buildroot.dir/build.make CMakeFiles/buildroot.dir/build \_ /usr/bin/cmake --build . --target install ⦿ \_ /usr/bin/gmake install …

在⦿点, make 丢弃工作人员环境,最终导致单线程汇编。


解决方法 在链接的电子邮件中赠送的那样,对我来说效果很好,是将所有自定义命令前缀 +env. 。像这样:

add_custom_target(buildroot
   #-- this ↓↓↓ here -- https://stackoverflow.com/a/41268443/531179
   COMMAND +env ${CMAKE_COMMAND} --build . --target install
   COMMENT "Populating buildroot..."
)
add_dependencies(deb buildroot)
add_dependencies(rpm buildroot) #... etc

最后,这出现在规则中 buildroot 在适当的makefile中(cmake会产生其中一堆),并导致GNU行为和尊重 -j.

希望这可以帮助。

仅通过谷歌搜索,看起来您正在使用Distcc(例如 这里)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top