Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: SLiDER от Январь 14, 2015, 17:00



Название: [РЕШЕНО] qbs и ccp.defines
Отправлено: SLiDER от Январь 14, 2015, 17:00
Ситуация такая, необходимо передать в компилятору строковый литерал, например, такого вида TEXT="Blah-blah-blah". Воспользуемся для этого списком из модуля cpp -> cpp.defines

cpp.defines: 'TEXT="Blah-blah-blah"'

или же

cpp.defines: "TEXT=\"Blah-blah-blah\""

Инет и документация говорят что эти строки идентичны и должны работать. И они действительно идентичны, но не работают, ибо в итоге qbs превращает этот define в следующего вида гадость

"-DTEXT="\^""Blah-blah-blah"\^"""

Естественно компилятор ее не жрёт. Что делать ума не приложу. Судя по исходникам характерно это только для винды.


Название: Re: qbs и ccp.defines
Отправлено: kuzulis от Январь 14, 2015, 18:03
У меня все работает:

Код
 
Project {
   ...
   readonly property stringList generalDefines: {
       var defines = [];
       defines.push("ORGANIZATION_NAME=\"" + project.productManufacturer + "\"");
       defines.push("APPLICATION_NAME=\"" + project.productName + "\"");
       defines.push("PRODUCT_VERSION=\"" + project.productVersion + (project.releaseType ? ("-" + project.releaseType) : ("")) + "\"");
       ...
       defines.push("XXX_RSSI_SERVICE_UUID=\"2F5E50FF-DDD1-4412-ACEE-D11D923EEEEA\"");
       ...
       return defines;
   }
   ...
}
 
Application {
   Depends { name: "cpp" }
   ...
   cpp.defines: project.generalDefines
   ...
   Export {
       Depends { name: "cpp" }
       cpp.defines: product.cpp.defines
   }
}
 

Код
C++ (Qt)
...
void MainDialog::setProductVersion()
{
   ui->versionLabel->setText(PRODUCT_VERSION);
}
...
 

PS: Windows, MSVC2013



Название: Re: qbs и ccp.defines
Отправлено: SLiDER от Январь 14, 2015, 18:10
Вся фигня в том что макрос TEXT уже был определён в каком-то системном заголовочнике, поэтому у компилятора сносило башню. :)