Лучшим решением является то, что вы делаете: используйте sh
через MSYS, который также предоставляется Git для Windows 2.x в настоящее время и, таким образом, очень широко доступный.
Обоснование: Это связано с той оговоркой, что __DATE__
макрос эффективен только до тех пор, как вы touch
исходный файл каждый день. В противном случае компилятор не будет пересоздавать файл, и дата изменения не будет подтверждена.Выполнение touch
таким образом лучше всего выполнять с помощью командного файла, который сначала проверяет текущую дату, и условно пропускает операцию касания, если дата исходного файла совпадает с текущей датой. Это позволяет избежать перекомпоновки и перенастройки файла компилятора каждый раз, когда кто-либо вносит какие-либо изменения в любой файл проекта.
touch
не доступна на Windows, но есть обходные, что cmd
содружественная:
copy /b filename.ext +,,
(https://superuser.com/questions/10426/windows-equivalent-of-the-linux-command-touch#764721)
Тогда есть проблема, что __DATE__
фиксировано-формат. Хотите строку даты в формате 20180129
? Очень жаль. Вы застряли в длинной форме, как это предусмотрено вашим компилятором. Некоторые компиляторы даже локализуют его: в одном проекте, над которым я работал, строка __DATE__
содержала японские символы, когда приложение было создано на машине, установленной в японском языке.
Так что, имея в виду все это, вы можете просто придерживаться MSYS/CoreUtils как широко доступной зависимости. Прими это. Есть тонкая аккуратная магия шага, которую вы можете сделать быстро и легко, используя BASH, который поставляется с Git для Windows, и эти шаги сборки мгновенно перекрестно совместимы с Linux/Mac тоже!
Не только GCC или MVS поддерживают эти макросы, но и любой компилятор ANSI C. На практике вы можете предположить, что все компиляторы C/C++ поддерживают их. –
Правильно. Исправлена. –
@ смысл-материи и Маттье: Можно ли ссылаться на это? Это самое близкое, что я мог найти: http://c0x.coding-guidelines.com/6.10.8.html – Antonio