make
최신 여부에 관계없이 FreeBSD가 내가 지정한 대상을 강제로 실행하고 싶습니다 .
GNU make에서 플래그를 사용하여 수행 할 수 있다는 것을 알고 있지만 -B
FreeBSD make 매뉴얼 페이지에서 유사한 내용을 찾을 수 없습니다.
답변1
일부 대상만(항상) 원하는 경우 대신 사용하여 다음을 확인할 수 !
있습니다 :
.
target! source
touch target
시도해 보면 make target
최신 버전이라도 작동합니다.touch target
target
source
조사하다사람들은 그래:
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 -B
bmake와 잠재적으로 동등한 것은 다음과 같습니다 .
printf '%s\n' ".PHONY: $(bmake -V .ALLTARGETS)" ".include \"./Makefile\"" | bmake -f -
이 코드 조각의 기능은 다음과 같습니다.
$(bmake -V .ALLTARGETS)
bmake에 알려진 모든 대상 목록을 가져옵니다. 이것은 제가 bmake에서 가장 좋아하는 기능 중 하나입니다. 사용자가 지정할 수 있는 대상의 전체 목록을 bmake에 요청할 수 있다는 것은 매우 편리합니다..PHONY: ...
모든 기존 대상에 가짜 속성을 할당합니다. 이렇게 하면 모든 대상이 오래된 것으로 간주되어 bmake가 최신 여부에 관계없이 해당 대상을 실행하게 됩니다..include "./Makefile"
실제 메이크파일을 포함합니다.bmake -f -
makefile
bmake에게 일반적인 sum 대신 표준 입력으로 makefile을 가져오도록 지시합니다Makefile
.
여기에는 다양한 엣지 케이스가 있지만 소규모 프로젝트에는 충분합니다. 그럼에도 불구하고 GNU Make의 -B
플래그는 복잡한 코드 기반에는 그다지 유용하지 않습니다. 그러나 bmake에 GNU Make 스타일 플래그가 없다는 점은 -B
명확한 해결 방법이 없는 제한 사항입니다.