Вставить временную метку в объектном коде во время компиляции с помощью С++

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

Ответ 1

Вы можете использовать __DATE__ и __TIME__.

Ответ 2

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

Вы хотите __TIME__ и, возможно, __DATE__.

Ответ 3

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

Ответ 4

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

Цитата от процессора GNU C doc

__DATE__

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

__TIME__

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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