[РЕШЕНО] Запутался с define

Модератор: Модераторы разделов

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

[РЕШЕНО] Запутался с define

Сообщение devilr »

Доброго времени суток!
Есть несколько дефайнов

Код: Выделить всё

#define AAA 1
#define BBB 2
#define CCC 3
#define RESULT ???
Хотелось бы в RESULT получить строку "1.2.3", но, то ли лыжи не едут, то ли я совсем забыл сопроцессор :(
Подскажите, что написать вместо ???
Последний раз редактировалось devilr 18.01.2021 00:09, всего редактировалось 1 раз.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18958
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: Запутался с define

Сообщение Bizdelnick »

Код: Выделить всё

#define Q(x) #x
#define QUOTE(x) Q(x)

#define AAA 1
#define BBB 2
#define CCC 3

#define RESULT QUOTE(AAA) "." QUOTE(BBB) "." QUOTE(CCC)
Костыль подглядел тут.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

Re: Запутался с define

Сообщение devilr »

Я бы сказал: очень сурово! :)
Но - работает.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 522
ОС: debian, fedora (i3-wm)

Re: [РЕШЕНО] Запутался с define

Сообщение olecya »

Чуть менее сурово:

Код: Выделить всё

#define RESULT QUOTE(A.B.C)
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: [РЕШЕНО] Запутался с define

Сообщение s.xbatob »

я знаю вариант куда более мистический.
Только — оно вам точно нужно? или это "препер спросил"?
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

Re: [РЕШЕНО] Запутался с define

Сообщение devilr »

Это - для генерации RC файла под оффтопик. Для Qt.
Да - я читал документацию. Но - там не всё однозначно.
Да - мне не нравится оффтопик. Но - сейчас сложное время.
P.S. Если вы знаете более правильный способ сделать подобное - покажите, пожалуйста.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: [РЕШЕНО] Запутался с define

Сообщение Hephaestus »

devilr писал(а):
18.01.2021 20:07
Это - для генерации RC файла под оффтопик. Для Qt.
У Вас сама генерация реализована средствами препроцессора?
Или это просто кусок программы, выполняющей генерацию?
devilr писал(а):
18.01.2021 20:07
Да - мне не нравится оффтопик. Но - сейчас сложное время.
У-у-у... Если бы мы все могли использовать исключительно то, что нравится...
Но не у всех есть такая роскошь.
Я под оффтопиком за несколько лет уже весь unix наверно к себе перетащил в cygwin.
А сейчас вот 32-битный cygwin сломался, пока думаю, как лучше решить.
Ну, не могу я без нормальной командной строки, хоть убейте. Хотя бы из-за git.
И разные линуксовые инструменты неплохо помогают. И shell-скрипты.

devilr писал(а):
18.01.2021 20:07
Если вы знаете более правильный способ сделать подобное
Для "правильного способа" слишком мало исходных данных.
Может, и этот способ "правильный". А может, и вообще генерации никакой не нужно. Судить трудно.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

Re: [РЕШЕНО] Запутался с define

Сообщение devilr »

Hephaestus писал:
18.01.2021 21:11
У Вас сама генерация реализована средствами препроцессора?
Или это просто кусок программы, выполняющей генерацию?
Кусок программы. Просто там есть две переменные (как раз, фактически define), которые заполняются вручную (точнее собираются из четырёх). Как обычно - MAJOR, MINOR, BUILD, PATCH (они как раз реализованы в виде difine).
И, как раз нужно (идея скорее заказчика, чем моя), чтобы BUILD инкреминировалась при каждой полной пересборке программы. Ну и дальше из этих 4 define собирается 1 define.
С самой версией файла разобрался - сделал короткую программу, которая делает header-файл с нужными define. И запускается, именно при полной пересборке программы.
А вот с оффтопиком вышла засада - этот RC-файл весьма капризен к структуре. В результате, сделал как раз способом, решённым в этой теме.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 753
ОС: Slackware

Re: [РЕШЕНО] Запутался с define

Сообщение UnixNoob »

Hephaestus писал:
18.01.2021 21:11
Я под оффтопиком за несколько лет уже весь unix наверно к себе перетащил в cygwin.
А сейчас вот 32-битный cygwin сломался, пока думаю, как лучше решить.
Ну, не могу я без нормальной командной строки, хоть убейте. Хотя бы из-за git.
И разные линуксовые инструменты неплохо помогают. И shell-скрипты.
В сторону wsl не смотрели? Или не та версия? Я сам не пробовал, но вроде как чьи-то потребности удовлетворяет.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: [РЕШЕНО] Запутался с define

Сообщение Hephaestus »

devilr писал(а):
18.01.2021 21:21
И, как раз нужно (идея скорее заказчика, чем моя), чтобы BUILD инкреминировалась при каждой полной пересборке программы.
Может быть, я неправ, но такие вещи логичнее делать на уровне сборочных файлов, а не исходных текстов программы.
В autotools, помнится, были соответствующие переменные. И в CMake такое есть,
и разного рода среды разработки всякие там Delphi, Builder'ы и пр. позволяют заполнить "свойства проекта",
где номер версии, сборки и т.п., то есть практически во всех инструментах, которые мне доводилось щупать, это было реализовано на уровне сборки.
Сами исходники здесь - постольку, поскольку.
В этом смысле генерация чего-то там в RC (да ещё программа для генерации) на первый взгляд выглядит излишеством.
Добавлено (22:47):
UnixNoob писал:
18.01.2021 22:14
В сторону wsl не смотрели? Или не та версия?
Версия действительно не та, но посмотреть доводилось.
UnixNoob писал:
18.01.2021 22:14
вроде как чьи-то потребности удовлетворяет.
У меня сложилось впечатление, что это одни разговоры.
Не знаю, кого это может удовлетворять.
Линуксоид будет использовать нормальный линукс.
А не-линуксоид в этой штуке всё равно ни черта не понимает. Живой пример был перед глазами.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

Re: [РЕШЕНО] Запутался с define

Сообщение devilr »

Hephaestus писал:
18.01.2021 22:41
Может быть, я неправ, но такие вещи логичнее делать на уровне сборочных файлов, а не исходных текстов программы.
Тут - каждому своё. Заказчику нравится qmake и qtcreator.
Hephaestus писал:
18.01.2021 22:41
В этом смысле генерация чего-то там в RC (да ещё программа для генерации) на первый взгляд выглядит излишеством.
Вы это просто не пробовали, видимо. :) Этот RC файл команда из Qt, то рекомендуют создавать самостоятельно, то с помощью хитро названных дефайнов. Как по мне, так лучше иметь предсказуемое окружение, чем однажды увидеть, что в свойствах exe-файла, например, отсутствует копирайт. Или версия файла становится 0.0.0.0. Внезапно.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18958
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: [РЕШЕНО] Запутался с define

Сообщение Bizdelnick »

devilr писал(а):
18.01.2021 21:21
чтобы BUILD инкреминировалась при каждой полной пересборке программы
С точки зрения организации рабочего процесса (такой, как сейчас принято) это неправильный подход. Сборка не должна влиять на исходники, а у Вас получается, что для каждой сборки должен делаться дополнительный коммит. Нумерация сборок происходит в системе непрерывной интеграции. При сборке он уже должен как-то подставляться. Самый простой вариант — использовать средства сборочной системы.
Например, в случае cmake делается примерно так:

version.cc.in

Код: Выделить всё

const unsigned major = ${CMAKE_VERSION_MAJOR};
const unsigned minor = ${CMAKE_VERSION_MINOR};
const unsigned patch = ${CMAKE_VERSION_PATCH};
const unsigned build = ${BUILD_NUMBER};
const char *version = "${CMAKE_VERSION}.${BUILD_NUMBER}";
CMakeLists.txt

Код: Выделить всё

project(myproject VERSION 1.2.3)
option(BUILD_NUMBER "sequential nubmer of build in CI" 0)
configure_file(version.cc.in version.cc)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 3220
ОС: Mandriva => Gentoo (~amd64)

Re: [РЕШЕНО] Запутался с define

Сообщение devilr »

Bizdelnick писал:
18.01.2021 23:53
Сборка не должна влиять на исходники, а у Вас получается, что для каждой сборки должен делаться дополнительный коммит. Нумерация сборок происходит в системе непрерывной интеграции.
Кому она не должна? :) Если бы это делалось самим qtcreator (я имею в виду нумерацию версий), причём нормально минимум для трёх операционных систем, то я был бы только рад.
Заказчик платит, он и музыку (правила) заказывает. Возможно, когда то, в далёком светлом будущем, qmake окончательно отомрёт и ваш любимый cmake станет основным инструментом для qtcreator, но пока это не так. Или сам Qt заменится чем то другим.
Bizdelnick писал:
18.01.2021 23:53
project(myproject VERSION 1.2.3)
Вы тут это самое "3" можете забыть изменить и заказчик оторвёт голову за дополнительные траты на выпуск оповещения на изменение технической документации.
Я понимаю, что вы хотите как лучше/правильнее, но сейчас нельзя использовать что-то, кроме qmake.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Linux это просто
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18958
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: [РЕШЕНО] Запутался с define

Сообщение Bizdelnick »

devilr писал(а):
19.01.2021 00:09
Вы тут это самое "3" можете забыть изменить и заказчик оторвёт голову за дополнительные траты на выпуск оповещения на изменение технической документации.
Ну так не забывайте. Как будто #define PATCH нельзя забыть изменить.
devilr писал(а):
19.01.2021 00:09
Я понимаю, что вы хотите как лучше/правильнее, но сейчас нельзя использовать что-то, кроме qmake.
Я просто не знаю, как это делается в qmake, и мне лень с ним разбираться (ну не нравится он мне). Это не значит, что в нём нельзя сделать аналогично. Извините, что привёл чересчур конкретный пример для иллюстрации общей идеи.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: [РЕШЕНО] Запутался с define

Сообщение Hephaestus »

devilr писал(а):
18.01.2021 23:04
Заказчику нравится qmake и qtcreator.
Которые, стало быть, этого не умеют?
devilr писал(а):
18.01.2021 23:04
Вы это просто не пробовали, видимо.
Qt я действительно не пробовал.
Я исходил из общих соображений.
devilr писал(а):
19.01.2021 00:09
Я понимаю, что вы хотите как лучше/правильнее
Вы сами спросили, как правильнее:
devilr писал(а):
18.01.2021 20:07
Если вы знаете более правильный способ сделать подобное - покажите, пожалуйста.
и на уровне сборки - это действительно правильнее.
Причем, в той же Delphi я это видел ещё во времена студенчества - лет двадцать назад.
В других инструментах видел позже - по мере знакомства с ними.
Если в Qt-инструментах этого до сих пор нет, тады ой. Но это как-то странно.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: