[Qt-creator] Detecting different build configurations in the .pro file
Coda Highland
chighland at gmail.com
Mon May 14 16:40:28 CEST 2012
On Mon, May 14, 2012 at 7:41 AM, Duane <duane.hebert at group-upc.com> wrote:
> On 05/13/2012 01:39 AM, Orgad and Raizel Shaneh wrote:
>> On Thu, May 10, 2012 at 10:36 PM, Duane Hebert
>> <duane.hebert at group-upc.com> wrote:
>>>
>>>
>>> On 05/10/2012 03:29 PM, Orgad and Raizel Shaneh wrote:
>>>>
>>>> On Thu, May 10, 2012 at 10:25 PM, Duane<duane.hebert at group-upc.com>
>>>> wrote:
>>>>>
>>>>> On 05/10/2012 11:11 AM, Daniel Teske wrote:
>>>>>>
>>>>>> On Thursday 10 May 2012 16:35:16 ext Duane wrote:
>>>>>>>
>>>>>>> We're building for an embedded linux device. I have a build of qt libs
>>>>>>> using the linux frame buffer instead of x and a build of qt using the
>>>>>>> regular linux desktop stuff. For development I build with the desktop
>>>>>>> version. For deployement and hardware testing I build with the frame
>>>>>>> buffer version. This works well.
>>>>>>>
>>>>>>> The trouble is that I have some static libs for qwt and
>>>>>>> qtsingleapplication, among others that when built, use conditional
>>>>>>> builds based on Win32 or X11. So when built for linux they use X11 but
>>>>>>> when I'm building my app for the target, there is no X11. So I have
>>>>>>> builds of the libs with the frame buffer version of qt as well. This
>>>>>>> also works but I have to modify the .pro file each time that I change
>>>>>>> build types.
>>>>>>>
>>>>>>> What I'd like to do is somehow in my project file include one version
>>>>>>> lib or another based on which build I'm doing. I was thinking maybe
>>>>>>> using the mkspec or something. The frame buffer version uses
>>>>>>> qws/linux-... as opposed to just linux..
>>>>>>>
>>>>>>> Any idea how to achieve this or is it not possible?
>>>>>>
>>>>>> See http://qt-project.org/doc/qt-4.8/qmake-advanced-usage.html
>>>>>> You can probably use what is described under "Platform Scope Values"
>>>>>
>>>>> Well I thought that I could use something like the example:
>>>>> message($$QMAKESPEC)
>>>>>
>>>>> linux-g++ {
>>>>> message(Linux)
>>>>> }
>>>>>
>>>>> because when looking at the makespec from the build configuration, the
>>>>> one for the frame buffer shows qws/linux-x86-g++ and the desktop one
>>>>> shows linux-g++.
>>>>>
>>>>>
>>>>> But when I add
>>>>> message($$QMAKESPEC)
>>>>>
>>>>> linux-g++ {
>>>>> message(Linux)
>>>>> }
>>>>>
>>>>> qws/linux-x86-g++ {
>>>>> message(Linux frame buffer)
>>>>> }
>>>>>
>>>>> to the .pro file, the output that I see is:
>>>>> Project MESSAGE:
>>>>> Project MESSAGE: Linux
>>>>>
>>>>> So it seems that $$QMAKESPEC is null.
>>>>>
>>>>> _______________________________________________
>>>>> Qt-creator mailing list
>>>>> Qt-creator at qt-project.org
>>>>> http://lists.qt-project.org/mailman/listinfo/qt-creator
>>>>
>>>> There's an open report for that: QTBUG-22700. I think it's planned (or
>>>> maybe already implemented?) for Qt 5.0.
>>>>
>>>
>>> Thanks. I wonder if there is a way to detect if X11 is defined?
>>
>> You can test for mkspec, wildcards allowed. In you case:
>> linux-g++ {
>> # X11
>> }
>> linux-x86-g++ {
>> # framebuffer
>> }
>> linux-* {
>> # both, excluding windows and mac
>> }
>
>
> I would have thought so as well but this doesn't work. In both builds,
> it falls into the linux-g++ case. If I go to the projects view and put
> my mouse over the Qt version combo box, I get the tool tip and it says
> that the mkspec is qwt/linux-x86-g++. When I switch builds to the x11
> build the mkspec is linux-g++.
>
> But if I put:
> linux-x86-g++ {
> message (Build using frame buffer)
>
> }
>
> linux-g++ {
> message (Build using X11)
>
> }
>
>
> and either build or run qmake, the Build using X11 shows.
>
> This is not a severe problem, more of an annoyance. If I switch builds
> and don't change the .pro file, the build will fail eventually. But it
> wastes some time. I could set up separate projects but the projects are
> exactly the same except for a few libraries.
I've been known on several occasions to have build-time feature
switches in the CONFIG variable.
$ qmake -config useFoo
useFoo {
DEFINES += USE_FOO
LIBS += -L/path/to/foo -lfoo
}
else {
# deps for non-foo
}
This works great, though of course you have to remember to pass the
-config flag to qmake. (But once you've done it once, you can "make
qmake" to reprocess without having to type the whole command line.)
/s/ Adam
More information about the Qt-creator
mailing list