Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: xintrea от Март 16, 2011, 18:38



Название: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: xintrea от Март 16, 2011, 18:38
Здравствуйте!


В моем кроссплатформенном проекте возникла необходимость учитывать особенности сборки под разные операционки. Поэтому мне нужно иметь одну централизованную точку управления в которой я бы указывал, под какую систему идет сборка. Сборка под разные системы отличается и разными опциями в pro-файле, и разным C++ кодом.

Мы можем создавать в пространстве *.pro-файла произвольные переменные, например TARGET_PLATFORM, и по условию генерировать соответсвущие опции сборки (используя выражение проверки и скобки {}). Мы можем и передавать в qmake нужную переменную. То есть, со сборкой проблем нет.

Проблема в том, чтобы засунуть информацию о целевой платформе, под которую идет компиляция, в C++ код. Например, задав какому-нибудь дефайну нужное значение.


Вопрос. Как задать С++-шному дефайну нужное значение, причем сделать это нужно из *.pro-файла. Как это сделать? Не могу сообразить.


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: BRE от Март 16, 2011, 18:39
DEFINES += MY_OPT


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: twp от Март 16, 2011, 18:47
это случайно не будет дублировать предопределенные в Qt дефайны начинающиеся с Q_OS_ ?


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: xintrea от Март 16, 2011, 23:06
это случайно не будет дублировать предопределенные в Qt дефайны начинающиеся с Q_OS_ ?

Будет. Именно потому, что в Qt есть только Q_OS_UNIX, но нет, например, Q_OS_MEEGO.


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: pastor от Март 17, 2011, 00:27
А можно подробнее обрисовать ситуацию? Зачем понадобился Q_OS_MEEGO?


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: xintrea от Март 17, 2011, 02:41
А можно подробнее обрисовать ситуацию? Зачем понадобился Q_OS_MEEGO?

Затем, что у них правила наиманования пакетов и размещения файлов особенные.

Вот мой вольный перевод:

Цитировать
Требование 3.1.1 - Выбор имени

Название пакета должно начинаться с полного названия домена владельца (в нижнем регистре, в обратном порядке), а в конце должно быть имя приложения. Например:  com.companyname.appname.

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

Цитировать
Требование 3.1.4 - Размещение файлов

Приложение должно устанавливаться в директорию /opt/packagename/, и, если необходимо, можно использовать директории /etc/opt/packagename/ и /var/opt/packagename/.

Общесистемные конфигурационные файлы следует располагать в директории /etc/opt/packagename/. Временные данные, такие как файлы блокировок и кеширующие файлы, следует размещать в каталоге /var/opt/packagename/, и не размещать напрямую в /var, за исключением случаев, когда это действительно необходимо для корректной работы приложения.

Файлы, специфичные для пользователя, необходимо размещать в директории ~/.config/packagename. Это обосновывается тем, что таким образом избегаются столкновения между файлами пакетов прикладных программ и системных файлов, так как такое расположение файлов будет наверняка уникальным для конкретного приложения.

Кратко говоря, бинарные файлы, файлы конфигурации системы, файлы блокировок и кеширующие файлы должны располагаться в соответсвующих отдельных уникальных каталогах.

Таким образом, если в обычном линухе я могу размещать бинарь в /usr/local, то в MeeGo я должен размещать в /opt/net.anysite.mytetra.

Если в обычном линухе мне нужно писать C/C++ логику поиска файлов пользователя в каталоге ~/.mytetra или ~/.config/mytetra, то для MeeGo нужно их искать в ~/.config/net.anysite.mytetra.


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: pastor от Март 17, 2011, 15:41
Какая версия MeeGo? И что за мануал такой?

Мы устанавливаем в usr/share/<app_name>, никаких проблем нет


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: xintrea от Март 17, 2011, 16:39
Какая версия MeeGo?

Любая.


И что за мануал такой?

Вот такой: http://appdeveloper.intel.com/en-us/article/meego-packaging-and-compliance-guidelines (http://appdeveloper.intel.com/en-us/article/meego-packaging-and-compliance-guidelines)


Мы устанавливаем в usr/share/<app_name>, никаких проблем нет

Я тоже в /usr/local ставлю и никаких проблем. Но в официальнеый репозитарий такое не принимают:

Цитировать
Below are my observations:

Naming – Not satisfied

You will have to name your package according to the naming convention specified in the above document.


Install path: Not satisfied

Your app installs in the /usr/local/bin folder. To be Meego compliant, it should install in /opt/packagename folder. Desktop file installs in correct location. Icon file installs in correct location.

И это еще не догляели, что даныне в ~/.mytetra хранятся а не в ~/.config/ru.mysite.mytetra.


Название: Re: Как из *.pro - файла засунуть в исходники нужный #define?
Отправлено: pastor от Март 17, 2011, 17:34
ааа, так ты хочешь загрузить свое приложение в Intel AppUp, теперь понятны требования