프로그램에 빌드 타임 기록하기

Posted at 2008/08/08 16:25 // in Programming // by Daniel


리눅스 계열의 경우 동작합니다.
make할 때마다 빌드시각을 version.c 파일을 생성해서 저장하고 그 파일에 있는 함수를 참조하게 해서 씁니다.

.PHONY:version clean

LD=gcc

test: test.o version.o
 ${LD} version.o test.o -o test


version.o:version.c version

version:
 @echo Making version information
 @echo -n 'const char* myversion(void) { const char* Build_Info  = "' > version.c
 @echo -n `date` >> version.c
 @echo '"; return Build_Info; }' >> version.c

clean:
 rm -f test test.o version.o

Makefile은 위와 같습니다.
version을 phony 타겟으로 지정해서 타겟에 상관없이 매번 생성케 했고
version.o가 version 타겟을 받으므로
test <- test.o, version.o <- version
의 빌드 의존성이 생겨서 최종바이너리인 test를 만들기 위해선 매번 version을 갱신하게 됩니다.
make version 하면
version.c 에 다음과 같이 써지게 됩니다.

const char* myversion(void) { const char* Build_Info  = "Fri Aug 8 16:19:58 KST 2008"; return Build_Info; }

test.c에 const char* myversion(void);로 선언해놓고 쓰면 됩니다.
예를 들어 다음과 같이

/* test.c */
#include <stdio.h>

const char* myversion(void);

int main()
{
    printf("version: %s\n", myversion());
    return 0;
}

테스트해보면 다음과 같이 됩니다.

[danielsong@raffaello test]$ make
cc    -c -o test.o test.c
Making version information
cc    -c -o version.o version.c
gcc version.o test.o -o test
[danielsong@raffaello test]$ ./test
version: Fri Aug 8 16:24:33 KST 2008

빌드한 시간이 찍히는 걸 볼 수 있습니다.


 




 

크리에이티브 커먼즈 라이센스
Creative Commons License