Я тут пару лет назад
искалАвтор: Евгений Музыченко
Дата: 31.05.19
минимально извращенный способ извлечения в командном файле Windows параметров C++-проекта из .h-файлов.
Средне-извращенный у меня уже много лет был (прямой парсинг заголовков с обрезкой кавычек, если есть). Он мне не нравился тем, что не умел склеивать строки, отчего нельзя было определять производные параметры через определенные ранее (например, название продукта фигурирует в именах ряда экспортируемых объектов).
Предложенные варианты с использованием промежуточной выдачи препроцессора "в лоб" не прокатили — они особо ничем не лучше того, что уже было. А вчера я совершенно неожиданно вспомнил о __pragma (message ()). Это уже конструкция не препроцессора, а компилятора, она умеет склеивать строки.
В итоге получилось изрядное извращение:
— Командный файл создает временный .cpp-файл, включающий нужные параметрические заголовки и серию __pragma (message ()).
— Парсит параметры проекта, добывая путь к базовой библиотеке, где определены некоторые сервисные макросы.
— Вызывает компилятор, который на каждый вызов __pragma (message ()) выдает строку вида "set Var=Value".
— Копирует эти строки из выдачи компилятора во временный .cmd-файл.
— Вызывает временный .cmd-файл для определения переменных в текущей среде выполнения.
Уродливо, аж смотреть противно, но работает.