프로젝트는 하나의 파일에 __DATE__
과 __TIME__
을 포함하고 있습니다. 명시 적으로 수정 날짜를 변경하지 않고 다시 컴파일해야하는 것은 멋지다.Makefile에서 어떻게 하나의 파일을 강제로 재 컴파일 할 수 있습니까?
편집 : $ (shell touch -c ..) 서투른 경우 좋은 해결책 일 수 있습니다.
프로젝트는 하나의 파일에 __DATE__
과 __TIME__
을 포함하고 있습니다. 명시 적으로 수정 날짜를 변경하지 않고 다시 컴파일해야하는 것은 멋지다.Makefile에서 어떻게 하나의 파일을 강제로 재 컴파일 할 수 있습니까?
편집 : $ (shell touch -c ..) 서투른 경우 좋은 해결책 일 수 있습니다.
표준 관용구이
always-recompile.o: FORCE
FORCE:
같은 오브젝트 파일 (안 소스 파일!) 존재 (이 대상이 종래 FORCE라고합니다) 어떤 규칙이나 종속성이 없습니다하지 않는 대상에 의존을하는 것입니다
"FORCE"라는 파일이 어떻게 든 생성되면 중단됩니다. GNU하면 대신 이러한 제한이 없습니다 특수 타겟 .PHONY를 사용할 수 있도록하지만, 해당 파일을 다시 명시 적 규칙이 당신을 필요로 않습니다
always-recompile.o:
$(CC) $(CFLAGS) -c -o always-recompile.o always-recompile.c
.PHONY: always-recompile.o
은 자세한 내용은 http://www.gnu.org/software/make/manual/html_node/Phony-Targets.html를 참조하십시오.
이 작업을 수행하는 한 가지 방법은 make
을 실행하기 전에 해당 개체 파일 (.o
또는 .obj
)을 삭제하는 것입니다. 이것은 소스 파일 수정 날짜를 변경하지 않고 재 컴파일 (및 재 링크)을 트리거합니다.
문제의 해결책이 잘못되었을 수 있습니다. 일부 버전 관리 도구는 소스 버전의 세부 사항을 덤프 할 수 있습니다. 빌드 프로세스의 스크립트 해커 비트와 그 세부 사항이 코드에 내장됩니다. 소스를 체크 아웃하고 10 년 후에 다시 빌드해야하는 경우 중요하지 않습니다. 버전 정보는 해당 태그의 세부 정보를 반영합니다. – Steve314
@ Steve314 : 그는 빌드 번호와 빌드 날짜를 언급하는 상자를 원할 가능성이 큽니다. –
@Ken - 그렇다면 버전 관리 도구 트릭이 올바른 방법입니다. 스크립트 해커가 about 상자의 코드 (또는 리소스 파일)에 버전 정보를 추가 할 수없고 빌드 번호를 about 상자로 가져 오면 아마 쉽게 잊어 버리는 수동 개입이 필요할 것입니다. make, 컴파일러 또는 파일 시스템 모두 빌드 번호를 알지 못합니다. – Steve314