Название: Как из *.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, теперь понятны требования
|