始终使用 FreeBSD make 构建指定的目标(与 GNU make -B 标志一样)

始终使用 FreeBSD make 构建指定的目标(与 GNU make -B 标志一样)

我想强制makeFreeBSD 执行我指定的目标,无论它是否是最新的。

我知道可以使用-BGNU make 中的标志来完成,但我在 FreeBSD make 手册页中找不到类似的内容。

答案1

如果你只想要一些目标(并且总是),你可以使用 代替!:检查:

target! source
    touch target

如果您尝试,即使比 更新,make target也会运行。touch targettargetsource

检查人做:

FILE DEPENDENCY   SPECIFICATIONS

     Dependency   lines consist of one or more targets, an operator, and zero or
     more sources.  This creates a relationship   where the targets ``depend''
     on   the sources and are usually created from them.  The exact relationship
     between the target   and the source is determined by the operator that sep-
     arates them.  The three operators are as follows:

...

!    Targets are always re-created, but not until all sources have been
     examined and re-created as necessary.  Sources for a target accumu-
     late over dependency lines when this operator is used.  The target
     is removed if make is interrupted.

答案2

好吧,经过近 5 年的时间,我找到了一种方法来强制 bmake 做我想做的事情(至少在大多数情况下)。

似乎gmake -Bbmake 的潜在等价物是:

printf '%s\n' ".PHONY: $(bmake -V .ALLTARGETS)" ".include \"./Makefile\"" | bmake -f -

以下是该代码片段的作用:

  1. $(bmake -V .ALLTARGETS)获取 bmake 已知的所有目标的列表。这是我最喜欢的 bmake 功能之一。能够向 bmake 询问用户可以指定的目标的完整列表是非常方便的。
  2. .PHONY: ...将 phony 属性分配给所有现有目标。这样,所有目标都将被视为过时,这将导致 bmake 执行它们,无论它们是否是最新的。
  3. .include "./Makefile"包括实际的 makefile。
  4. bmake -f -告诉 bmake 在标准输入上获取其 makefile,而不是通常的makefileMakefile

这里有各种边缘情况,但对于小型项目来说已经足够了。无论如何, GNU Make 的-B标志对于复杂的代码库来说并不是很有用。然而,bmake 中缺少 GNU Make 风格-B标志是一个限制,没有明确的解决方法。

相关内容