2010-07-22 6 views
5

프로젝트는 하나의 파일에 __DATE____TIME__을 포함하고 있습니다. 명시 적으로 수정 날짜를 변경하지 않고 다시 컴파일해야하는 것은 멋지다.Makefile에서 어떻게 하나의 파일을 강제로 재 컴파일 할 수 있습니까?

편집 : $ (shell touch -c ..) 서투른 경우 좋은 해결책 일 수 있습니다.

+1

문제의 해결책이 잘못되었을 수 있습니다. 일부 버전 관리 도구는 소스 버전의 세부 사항을 덤프 할 수 있습니다. 빌드 프로세스의 스크립트 해커 비트와 그 세부 사항이 코드에 내장됩니다. 소스를 체크 아웃하고 10 년 후에 다시 빌드해야하는 경우 중요하지 않습니다. 버전 정보는 해당 태그의 세부 정보를 반영합니다. – Steve314

+0

@ Steve314 : 그는 빌드 번호와 빌드 날짜를 언급하는 상자를 원할 가능성이 큽니다. –

+0

@Ken - 그렇다면 버전 관리 도구 트릭이 올바른 방법입니다. 스크립트 해커가 about 상자의 코드 (또는 리소스 파일)에 버전 정보를 추가 할 수없고 빌드 번호를 about 상자로 가져 오면 아마 쉽게 잊어 버리는 수동 개입이 필요할 것입니다. make, 컴파일러 또는 파일 시스템 모두 빌드 번호를 알지 못합니다. – Steve314

답변

8

표준 관용구이

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를 참조하십시오.

+1

always-recompile.o는 가짜 대상이 아니기 때문에 ".PHONY : FORCE"를 수행해야합니다. ".PHONY : FORCE"를 사용하면 FORCE라는 파일이 생성되는지 여부는 중요하지 않습니다. – camh

+0

실제로 작동합니까? GNU는 가짜 타겟과 같은 수동 사운드를 실제 타겟의 의존성으로 사용하지 않습니다. – zwol

1

이 작업을 수행하는 한 가지 방법은 make을 실행하기 전에 해당 개체 파일 (.o 또는 .obj)을 삭제하는 것입니다. 이것은 소스 파일 수정 날짜를 변경하지 않고 재 컴파일 (및 재 링크)을 트리거합니다.

관련 문제