У меня большой проект, который я сейчас занимаюсь рефакторингом. Одной из проблем является массовое злоупотребление строковыми литералами (более 300 экземпляров) для общих путей, используемых продуктом (т.е. ссылки на /opt/dev
и подпуть этого места) повсюду, в том числе:
Я хотел бы использовать GNU m4 определить файл с набором общих макросов, чтобы мы могли «писать один раз, использовать везде», чтобы, если наш код был разветвленным (типично для нового продукта), мы могли просто изменить макросы в этом одном файле вместо поиска вниз дубликаты строковых литералов и отладка их в течение нескольких дней. Это достаточно просто для простых вещей, таких как сценарии, поскольку я просто создаю копию исходного дерева в пути вывода сборки и запускаю M4 непосредственно для сценариев.
Единственным недостатком на данный момент является то, что, похоже, это будет огромным усилием для проектов C / C ++, потому что я хочу только выполнить M4
расширение / замена макроса во время компиляции. Это означает, что во избежание изменения исходных файлов, извлеченных из git, мне придется изменить мои сценарии сборки (множество файлов Makefile) для работы с временной копией кода, а не с самими исходными исходными файлами. В противном случае работает M4
непосредственно в источнике с управлением версиями произойдет изменение локальной рабочей копии, и разработчики, скорее всего, передадут эту копию кода, оцененную M4, в систему управления версиями, что нарушит усилия M4.
Можно ли проинструктировать НКУ оценить m4 макросы / расширения во время компиляции, либо с помощью какого-либо внешнего инструмента или какой-либо функции самого GCC? Если нет, мои сценарии сборки, вероятно, потребуют серьезного пересмотра для поддержки макросов M4.
использование m4
генерировать project-config.h
заголовок для кода C и / или C ++. Используйте этот заголовок в каждом файле, который должен использовать один из макросов. Убедитесь, что программисты знают, что это то, что следует использовать. Возможно принудительное использование проверок кода перед регистрацией или периодическое сканирование базы кода? Перекомпилируйте затронутые файлы при изменении этого заголовка. Не меняйте это без необходимости.
Других решений пока нет …