__TIME__
и __DATE__
могут работать, однако есть некоторые сложности.
Если вы поместите эти определения в файл .h и включите определения из нескольких файлов .c / .cpp, у каждого файла будет своя версия даты / времени в зависимости от того, когда он будет скомпилирован. Так что, если вы хотите использовать дату / время в двух разных местах, и они всегда должны совпадать, у вас проблемы. Если вы выполняете инкрементную сборку, один из файлов может быть перестроен, а другой - нет, что снова приводит к тому, что метки времени могут сильно отличаться.
Немного лучший подход - создать прототипы GetBuildTimeStamp () в файле .h и поместить макросы __TIME__
и __DATE__
в файл реализации (.c / .cpp). Таким образом, вы можете использовать метки времени в нескольких местах в вашем коде, и они всегда будут совпадать. Однако вы должны убедиться, что файл .c / .cpp перестраивается при каждом выполнении сборки. Если вы делаете чистые сборки, то это решение может работать для вас.
Если вы выполняете инкрементную сборку, вам необходимо убедиться, что штамп сборки обновляется при каждой сборке. В Visual C ++ вы можете сделать это с помощью шагов PreBuild - однако в этом случае я бы рекомендовал вместо использования __DATE__
и __TIME__
в скомпилированном файле .c / .cpp использовать текстовый файл, который читается в время выполнения во время выполнения вашей программы. Это позволяет вашему сценарию сборки быстро обновлять метку времени (не требуется компиляция или связывание) и не требует, чтобы ваш шаг PreBuild понимал флаги или параметры вашего компилятора.