Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 09:08
Оценка:
Я тут пару лет назад искал
Автор: Евгений Музыченко
Дата: 31.05.19
минимально извращенный способ извлечения в командном файле Windows параметров C++-проекта из .h-файлов. Средне-извращенный у меня уже много лет был (прямой парсинг заголовков с обрезкой кавычек, если есть). Он мне не нравился тем, что не умел склеивать строки, отчего нельзя было определять производные параметры через определенные ранее (например, название продукта фигурирует в именах ряда экспортируемых объектов).

Предложенные варианты с использованием промежуточной выдачи препроцессора "в лоб" не прокатили — они особо ничем не лучше того, что уже было. А вчера я совершенно неожиданно вспомнил о __pragma (message ()). Это уже конструкция не препроцессора, а компилятора, она умеет склеивать строки.

В итоге получилось изрядное извращение:

— Командный файл создает временный .cpp-файл, включающий нужные параметрические заголовки и серию __pragma (message ()).

— Парсит параметры проекта, добывая путь к базовой библиотеке, где определены некоторые сервисные макросы.

— Вызывает компилятор, который на каждый вызов __pragma (message ()) выдает строку вида "set Var=Value".

— Копирует эти строки из выдачи компилятора во временный .cmd-файл.

— Вызывает временный .cmd-файл для определения переменных в текущей среде выполнения.

Уродливо, аж смотреть противно, но работает.
параметры скрипт командный файл заголовок
Re: Колхозинг по извлечению параметров проекта :)
От: kov_serg Россия  
Дата: 05.07.21 09:41
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Уродливо, аж смотреть противно, но работает.

Создайте файл который выводит все интересующие значения
#include "includes.h"

void __dump_vars(DumpWriter &w) {
  w.put("PARAM1",PARAM1);
  ...
}

И в статичесткую либу его положите. В проект он не будет линковаться, но можно с ним собрать отдельную программу которая запишет все ваши параметры в нужно вам виде.
Сам файл генерировать скриптом.
Re[2]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 11:06
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>В проект он не будет линковаться, но можно с ним собрать отдельную программу которая запишет все ваши параметры в нужно вам виде.


Чем это будет лучше описанного способа?
Re[3]: Колхозинг по извлечению параметров проекта :)
От: kov_serg Россия  
Дата: 05.07.21 11:44
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Чем это будет лучше описанного способа?


Убираются этапы парсинга. И можно в runtime иметь список параметров компиляции или их хеш.
Отредактировано 05.07.2021 11:49 kov_serg . Предыдущая версия .
Re[4]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 11:58
Оценка:
Здравствуйте, kov_serg, Вы писали:

ЕМ>>Чем это будет лучше описанного способа?


_>Убираются этапы парсинга.


А толку? Эта вспомогательная программа сама себя не соберет. Если ее собирать в рамках сборки всего проекта, то нужно будет как-то разделить этапы, чтобы сперва собралась только вспомогательная, затем запустить ее, получить параметры, и с ними продолжить сборку всего остального. Упрощения или унификации не вижу, вижу только усложнение.

_>И можно в runtime иметь список параметров компиляции или их хеш.


Они там и так есть — параметрические заголовки всегда включаются в исходники проекта при сборке.
Re[5]: Колхозинг по извлечению параметров проекта :)
От: kov_serg Россия  
Дата: 05.07.21 12:08
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

_>>И можно в runtime иметь список параметров компиляции или их хеш.


ЕМ>Они там и так есть — параметрические заголовки всегда включаются в исходники проекта при сборке.

Может всё-таки сделать как обычно. Сделать файл манифеста проекта где описаны все параметры и зависимости и из него генерировать заголовки, а не наоборот.
https://youtu.be/XW8XHW3hs3o?t=398
Отредактировано 05.07.2021 12:11 kov_serg . Предыдущая версия .
Re[6]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 13:38
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Может всё-таки сделать как обычно. Сделать файл манифеста проекта где описаны все параметры и зависимости и из него генерировать заголовки, а не наоборот.


"Как обычно" манифест делается не для себя, а для системы, распространителей, магазинов приложений и т.п. Сомневаюсь, что кто-то в здравом уме стал бы делать его сугубо для внутренних целей.
Re: Колхозинг по извлечению параметров проекта :)
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 05.07.21 13:57
Оценка: +2
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Я тут пару лет назад искал
Автор: Евгений Музыченко
Дата: 31.05.19
минимально извращенный способ извлечения в командном файле Windows параметров C++-проекта из .h-файлов.


Определи эти параметры в файле с удобной для тебя структурой

Из этого файла генерируй хедер

-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 14:26
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Определи эти параметры в файле с удобной для тебя структурой

КД>Из этого файла генерируй хедер

Опять же, чем это будет проще? Нужен код, который парсит этот файт и генерит заголовок. Отладочные варианты я собираю студией, если включить туда этот файл в качестве зависимости, то надо будет прописывать для него способ обработки, к нему цеплять код преобразователя. Заголовки относятся к числу файлов, редактируемых студией: если вдруг этот заголовок окажется открыт в редакторе — студия возбудится, что он изменился. Такой же уродливый колхозинг.
Re[7]: Колхозинг по извлечению параметров проекта :)
От: Михaил  
Дата: 05.07.21 16:28
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

_>>Может всё-таки сделать как обычно. Сделать файл манифеста проекта где описаны все параметры и зависимости и из него генерировать заголовки, а не наоборот.


ЕМ>. Сомневаюсь, что кто-то в здравом уме стал бы делать его сугубо для внутренних целей.


А что смущает ?
Re[8]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.07.21 16:32
Оценка:
Здравствуйте, Михaил, Вы писали:

_>>>Сделать файл манифеста проекта


ЕМ>>Сомневаюсь, что кто-то в здравом уме стал бы делать его сугубо для внутренних целей.


М>А что смущает ?


Чрезмерный уровень сложности. Имеет смысл лишь при наличии удобных встроенных средств как создания/редактирования, так для парсинга/обработки XML.
Re: Колхозинг по извлечению параметров проекта :)
От: Skorodum Россия  
Дата: 07.07.21 08:00
Оценка: +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Уродливо, аж смотреть противно, но работает.

Если это вот эта задача
Автор: Евгений Музыченко
Дата: 31.05.19
:

Мне это нужно для автоматизации построения параметризованных продуктов при помощи командных файлов, чтобы не дублировать одни и те же параметры в разных местах.

То, да, это очень уродливое решение. Все это решается системами сборки типа CMake.

option(MY_PRODUCT_FEATURE_X_SUPPORT    "My Product feature X support"     OFF)
...
if (MY_PRODUCT_FEATURE_X_SUPPORT)
    add_compile_definitions(MY_PRODUCT_FEATURE_X_SUPPORT)
endif()
cmake
Re[2]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.07.21 09:03
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Все это решается системами сборки типа CMake.


С таким же успехом оно решается и использованием банального nmake от MS. Вопрос в том, как это увязать со студией, в которой я делаю отладочные сборки (у меня еще и VS 2008 до сих пор). Если бы нужно было делать только рабочие сборки скриптами давно бы вынес определения в makefile или сами скрипты.
Re[3]: Колхозинг по извлечению параметров проекта :)
От: Skorodum Россия  
Дата: 07.07.21 10:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>С таким же успехом оно решается и использованием банального nmake от MS.

То бишь Makefile.

ЕМ>Вопрос в том, как это увязать со студией, в которой я делаю отладочные сборки (у меня еще и VS 2008 до сих пор).

Новая студия (2017, 2019) поддерживает CMake, компилятор aka toolchain, наверное, можно прописать и старый.

ЕМ>Если бы нужно было делать только рабочие сборки скриптами давно бы вынес определения в makefile или сами скрипты.

Какие еще "рабочие сборки"? Не стоит придумывать какие-то свои термины для совершенно стандартных задач.
Вариантов компиляции может быть хоть сколько. В чем тут проблема?
Re[4]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.07.21 11:02
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Новая студия (2017, 2019) поддерживает CMake, компилятор aka toolchain, наверное, можно прописать и старый.


Так компиляторы мне как раз больше нравятся новые — они, поддерживая все больше новых возможностей языка, предупреждений, оптимизаций и т.п., очень умеренно растут в размерах (самые последние занимают не больше 50 Мб на платформу), работают так же быстро, как и 10-15 лет назад, и почти не жрут память. А вот со всех студий после 2008 меня все время блевать тянет — они пухнут со страшной скоростью, тормозят совершенно запредельно, и при этом жрут память непонятно куда.

Судя по всему, у MS осталось две команды относительно пряморуких разработчиков — на ядро и на VC++. Все остальные — или просто, или неимоверно криворуки.

S>Какие еще "рабочие сборки"?


Сборки, которые я ежедневно делаю в ходе разработки. Управлять ими непосредственно из-под студии гораздо удобнее, чем через внешние конфиги. У меня уже был опыт многолетней поддержки 16-разрядных модулей для Win9x, которые собирались через внешний makefile — удовольствие было так себе.

S>Вариантов компиляции может быть хоть сколько. В чем тут проблема?


В удобстве многочасовой ежедневной работы, вестимо.
Re[5]: Колхозинг по извлечению параметров проекта :)
От: удусекшл  
Дата: 07.07.21 11:03
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>А толку? Эта вспомогательная программа сама себя не соберет. Если ее собирать в рамках сборки всего проекта, то нужно будет как-то разделить этапы, чтобы сперва собралась только вспомогательная, затем запустить ее, получить параметры, и с ними продолжить сборку всего остального. Упрощения или унификации не вижу, вижу только усложнение.


Про dependencies и custom build steps не слышал?
Re[5]: Колхозинг по извлечению параметров проекта :)
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 07.07.21 11:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ> А вот со всех студий после 2008 меня все время блевать тянет — они пухнут со страшной скоростью, тормозят совершенно запредельно, и при этом жрут память непонятно куда.


OFFTOP. Тебе надо на 2022-ю переходить. Она хоть и жрет память, но хотя бы не упирается рогами в 32-битную крышу
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 07.07.2021 11:39 DDDX . Предыдущая версия .
Re[5]: Колхозинг по извлечению параметров проекта :)
От: Skorodum Россия  
Дата: 07.07.21 11:35
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Skorodum, Вы писали:

S>>Новая студия (2017, 2019) поддерживает CMake, компилятор aka toolchain, наверное, можно прописать и старый.
ЕМ>Так компиляторы мне как раз больше нравятся новые — они, поддерживая все больше новых возможностей языка, предупреждений, оптимизаций и т.п., очень умеренно растут в размерах (самые последние занимают не больше 50 Мб на платформу), работают так же быстро, как и 10-15 лет назад, и почти не жрут память. А вот со всех студий после 2008 меня все время блевать тянет — они пухнут со страшной скоростью, тормозят совершенно запредельно, и при этом жрут память непонятно куда.
Ну если вы привязаны к студии 2008, то наверное и там можно как-то прикрутить сборку на CMake как вызов внешней команды, но оно действительно так надо?

ЕМ>Сборки, которые я ежедневно делаю в ходе разработки. Управлять ими непосредственно из-под студии гораздо удобнее, чем через внешние конфиги.

Ну так в чем проблема? Определяете сборку где CMake передается опция "BUILD RELEASE VERSION WITH FEATURE X, Y, Z", CMake добавляет 100500 необходимых дефайнов.
Это совершенно стандартная ситуация со стандарнтым решением
А у ваше решение это вывернутый наизнанку ежик.

ЕМ>В удобстве многочасовой ежедневной работы, вестимо.

Если велосипеды на 3-угольных колесах не изобретать, то все удобно и просто
Re[6]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.07.21 13:37
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>Про dependencies и custom build steps не слышал?


Слышал, периодически пользуюсь. Для описанной задачи — слишком геморройно.
Re[6]: Колхозинг по извлечению параметров проекта :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 07.07.21 13:38
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Тебе надо на 2022-ю переходить. Она хоть и жрет память, но хотя бы не упирается рогами в 32-битную крышу


Сомневаюсь, что когда-нибудь сумею увидеть это упирание на своих проектах.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.