常にFreeBSD makeを使用して指定されたターゲットを構築します(GNU make -Bフラグと同じ)

常にFreeBSD makeを使用して指定されたターゲットを構築します(GNU make -Bフラグと同じ)

make最新かどうかにかかわらず、FreeBSDが私が指定したターゲットを強制的に実行したいと思います。

私はGNU makeのフラグを使って行うことができることを知っていますが、-BFreeBSD 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: ...すべての既存の宛先に偽属性を割り当てます。これにより、すべてのターゲットが古いと見なされ、bmakeが最新であるかどうかにかかわらずそのターゲットを実行できます。
  3. .include "./Makefile"実際のメイクファイルが含まれています。
  4. bmake -f -makefilebmakeに、通常のsumの代わりに標準入力としてmakefileを取得するように指示しますMakefile

これにはさまざまなエッジケースがありますが、小規模なプロジェクトには十分です。それにもかかわらず、GNU Makeの-Bフラグは複雑なコードベースにはあまり役に立ちません。ただし、bmakeにGNU Makeスタイルのフラグがないことは、-B明確な回避策がない制限です。

関連情報