相关疑难解决方法(0)

@, - 和+作为Make中的配方行的前缀做什么?

在GNU Makefile手册中,它提到了这些前缀.

如果提供.ONESHELL,则仅检查配方的第一行是否有特殊前缀字符('@',' - '和'+').

这些前缀做了什么,它们在哪里提到?

makefile gnu-make

161
推荐指数
2
解决办法
4万
查看次数

Makefile - 将作业参数传递给子makefile

我有一个调用多个其他makefile的makefile.

我想将-j param传递给其他makefile调用.

像(make -j8)这样的东西:

 all:
     make -f libpng_linux.mk -j$(J)
Run Code Online (Sandbox Code Playgroud)

其中$(J)是-j8的值8.我绝对发誓我以前做过这件事,但我无法找到我的榜样.

$(MAKEFLAGS)似乎包含--jobserver-fds = 3,4 -j,无论-j2还是-j8

编辑:可能的解决方案

将很快发布这个答案.

这似乎是一个不用担心的解决方案.调用主makefile时包含-j8.对make的子调用应该如下所示:

 all:
      +make -f libpng_linux.mk -j$(J)
Run Code Online (Sandbox Code Playgroud)

注意make前面的"+".我注意到当我尝试并行构建时发出警告:make [1]:警告:jobserver unavailable:使用-j1.在父制定规则中添加"+".

jobs makefile

6
推荐指数
1
解决办法
1万
查看次数

在make的并行执行中警告"强制执行submake"

当我跑来make -j3并行构建时,我明白了

warning: -jN forced in submake: disabling jobserver mode.
Run Code Online (Sandbox Code Playgroud)

文档中我发现了警告

如果make检测到子系统可以通信的系统上与并行处理相关的错误条件.

这些错误情况是什么?我该怎么做才能治愈它们或抑制错误信息?

makefile是从CMake生成的,所以我不能(=我不想)编辑makefile.

parallel-processing makefile cmake

6
推荐指数
1
解决办法
3221
查看次数

调用父目录的Makefile

我有一个具有以下目录结构的项目:

foo/
foo/Makefile
foo/bar/
Run Code Online (Sandbox Code Playgroud)

我的目标是添加一个文件foo/bar/Makefile,这样如果我调用makein foo/bar,将使用父目录的 Makefile 。这是一种反向递归 Makefile 结构(我希望每个 Makefile 都调用父目录,直到它到达项目根目录)。

符号链接失败,因为从错误的目录调用它会破坏所有相对路径:

$ ln -s ../Makefile foo/bar/Makefile
$ make -C foo/bar
[error]
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方案是编写一个 Makefile 来捕获我感兴趣的所有目标并使用该目标调用父目录:

$ cat foo/bar/Makefile
all clean:
    $(MAKE) -C .. $@
Run Code Online (Sandbox Code Playgroud)

这很费力并且容易破裂。有没有更优雅的解决方案?

理由

该项目是一个大型 LaTeX 文档,其中包含.tex章节、图表等文件的多个子目录。我希望能够make从这些目录中的任何一个调用来构建文档。

recursion latex makefile build

5
推荐指数
2
解决办法
4562
查看次数