컴파일 날짜 가져오기

컴파일 날짜 가져오기

Linux 명령에서 컴파일 날짜를 추출하려고 합니다(또는 cpp도 작동합니다). 나는 다음을 사용하고 있습니다 :

stat -c %z ./myProgram.bin

그러나 myProgram.binSSH를 통해 다른 위치로 복사하면 stat 명령은 기본적으로 복사 날짜를 알려줍니다.

실제 컴파일 날짜를 얻는 방법은 무엇입니까? 감사해요.

답변1

토마스 디키의 답변모든 (ELF) 바이너리의 경우 이 문제는 일반적으로 해결됩니다. 귀하의 질문이 표현된 방식을 고려하면 다음을 찾을 수 있습니다.__DATE__사전 __TIME__정의된 매크로유용합니다. 프로그램 내에서 컴파일 날짜와 시간을 참조할 수 있습니다(그래서 프로그램은 자체 컴파일 날짜와 시간을 알 수 있습니다).

간단한 예는 다음과 같습니다.

#include <stdio.h>

int main(int argc, char **argv) {
    printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
    return 0;
}

답변2

stat -c %z파일이 마지막으로 생성/업데이트된 시간을 표시하며 변경하거나 저장할 수 없습니다. 따라서 파일을 다른 위치에 복사하면 항상 새로운 현재 생성 시간을 얻게 됩니다. 당신이 찾고 있는 것은 stat -c %y일반적으로 파일과 디렉터리를 다루는 대부분의 도구에 의해 유지되는 마지막 수정 시간의 표시입니다.

답변3

보존 수정 시간을 복사할 수 있습니다. 예를 들면 다음과 같습니다.

cp --preserve=timestamps source destination

또는 (보다 일반적으로:모델,소유권그리고타임스탬프)

cp -p source destination

어떤 경우에는 유지되지만소유권반갑지 않은.

마찬가지로 scp의 옵션을 사용하여 원격 시스템에 복사할 수 있습니다 -p.

scp -p source remote:destination

하지만 scp모드 등에 대한 별도의 옵션은 없습니다. 주어진 방식으로 행동하기 때문에외딴권한이 없으므로 원격 소유권을 설정할 수도 없습니다. 이러한 제한 사항으로 인해 tar가능한 한 많은 정보를 보존하기 위해 원격 시스템에서 아카이브를 추출 할 수 있습니다 .

바이너리 파일의 ELF 형식에는 날짜가 포함되지 않으므로 파일의 수정 타임스탬프만 유지할 수 있습니다.

추가 자료:

관련 정보