항상 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명확한 해결 방법이 없는 제한 사항입니다.

관련 정보