Получить дату компиляции

Получить дату компиляции

Я пытаюсь извлечь дату компиляции из команды linux (или cpp тоже подойдет). Я использую:

stat -c %z ./myProgram.bin

Однако если я копирую myProgram.binв другое место, например, через ssh, команда 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, используемый для двоичных файлов, не включает дату, поэтому все, что вы можете сохранить, — это временная метка изменения файла.

Дальнейшее чтение:

Связанный контент