Russian Qt Forum
Ноябрь 24, 2024, 09:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как из *.pro - файла засунуть в исходники нужный #define?  (Прочитано 5806 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 16, 2011, 18:38 »

Здравствуйте!


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

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

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


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

Собираю информацию по крупицам
http://webhamster.ru
BRE
Гость
« Ответ #1 : Март 16, 2011, 18:39 »

DEFINES += MY_OPT
Записан
twp
Гость
« Ответ #2 : Март 16, 2011, 18:47 »

это случайно не будет дублировать предопределенные в Qt дефайны начинающиеся с Q_OS_ ?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #3 : Март 16, 2011, 23:06 »

это случайно не будет дублировать предопределенные в Qt дефайны начинающиеся с Q_OS_ ?

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

Собираю информацию по крупицам
http://webhamster.ru
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Март 17, 2011, 00:27 »

А можно подробнее обрисовать ситуацию? Зачем понадобился Q_OS_MEEGO?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Март 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.
Записан

Собираю информацию по крупицам
http://webhamster.ru
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Март 17, 2011, 15:41 »

Какая версия MeeGo? И что за мануал такой?

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #7 : Март 17, 2011, 16:39 »

Какая версия MeeGo?

Любая.


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

Вот такой: 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.
Записан

Собираю информацию по крупицам
http://webhamster.ru
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Март 17, 2011, 17:34 »

ааа, так ты хочешь загрузить свое приложение в Intel AppUp, теперь понятны требования
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.