Вставить метку времени в объектный код во время компиляции с C++

Я хочу выполнить printf() чтобы отобразить, когда исполняемый код был скомпилирован в последний раз. Предоставляет ли C/C++ макрос, который дает вам разрешение во время компиляции?

8 ответов

Решение

Вы могли бы использовать __DATE__ а также __TIME__,

16.8 Предопределенные имена макросов [cpp.predefined]
1 Следующие имена макросов должны быть определены реализацией:
__LINE__ Номер строки текущей исходной строки (десятичная константа).
__FILE__ Предполагаемое имя исходного файла (символьная строка-литерал).
__DATE__ Дата перевода исходного файла (строковый литерал в форме "Mmm dd yyyy", где названия месяцев совпадают с названиями месяцев, сгенерированными функцией asctime, а первый символ dd является пробелом, если значение меньше 10). Если дата перевода недоступна, указывается действительная дата, определенная реализацией.
__TIME__ Время трансляции исходного файла (символьный строковый литерал вида "чч: мм: сс", как во времени, сгенерированном функцией asctime). Если время перевода недоступно, указывается допустимое время, определенное реализацией.
__STDC__ Будь то __STDC__ является предопределенным, и если да, то каково его значение, определяется реализацией.
__cplusplus Имя __cplusplus определяется значением 199711L при компиляции модуля перевода C++.

Ты хочешь __TIME__ и, возможно, __DATE__,

Используйте макросы __DATE__ а также __TIME__

Если вы используете препроцессор gcc, то вы найдете то, что вы ищете в __TIME__ а также __DATE__ макрос

Цитата из GNU C Процессор док

__DATE__

Этот макрос раскрывается в строковую константу, которая описывает дату запуска препроцессора. Строковая константа содержит одиннадцать символов и выглядит как "12 февраля 1996". Если день месяца меньше 10, он дополняется пробелом слева.

__TIME__

Этот макрос расширяется до строковой константы, которая описывает время, в которое запускается препроцессор. Строковая константа содержит восемь символов и выглядит как "23:59:01".

Используйте сценарий или создайте приложение, чтобы сгенерировать исходный файл C++, содержащий дату и время сборки. Добавьте этот файл в настройку сборки. Другие части программы могут ссылаться на данные в этом файле.

Этот метод также полезен для встраивания номера версии в программу. Процесс сборки может контролировать номер версии.

Похоже, что компиляторы должны обеспечить __TIMESTAMP__ макрос, который должен работать для ваших целей.

Я использую это для отправки сообщения в DbgView:

    OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());

Вы можете добавить строку ниже в CMakeLists.txt

      string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S)

и

вам нужно добавить строку ниже в файл «ProjectName.h.in»

      #define TIMESTAMP @COMPILE_TIME@

тогда, когда вы скомпилируете свой проект, приведенная ниже строка будет записана в вашем «ProjectName.h»

      #define TIMESTAMP 20230220-203532
Другие вопросы по тегам