[CMake] Finding Debug Versions of Qt4 Frameworks on OS X

Clinton Stimpson clinton at elemtech.com
Mon Jul 19 17:15:12 EDT 2010


On 07/19/2010 02:54 PM, Michael Jackson wrote:
>
> On Jul 19, 2010, at 4:28 PM, Michael Wild wrote:
>
>>
>> On 19. Jul, 2010, at 19:59 , Michael Jackson wrote:
>>
>>> Wonder why I have never seen this before but with CMake 2.8.x and a 
>>> Qt4 based project on OS X when finding the Qt4 frameworks only the 
>>> release version is found, ie, the Debug version that is located 
>>> inside the framework is NOT found by default.
>>> My question is: is this a bug, a "feature" or should I be using the 
>>> DYLD_IMAGE_SUFFIX environment variable instead?
>>>
>>> The offending code is in the FindQt4.cmake file around lines 772:
>>>
>>> FIND_LIBRARY(QT_${_upper_qt_module}_LIBRARY_DEBUG
>>>                NAMES ${QT_MODULE}${QT_LIBINFIX}_debug 
>>> ${QT_MODULE}${QT_LIBINFIX}d ${QT_MODULE}${QT_LIBINFIX}d4
>>>                PATHS ${QT_LIBRARY_DIR} NO_DEFAULT_PATH
>>>       )
>>>
>>> I would imagine that the cmake code above is going to try and find 
>>> QtCore_debug.framework and NOT 
>>> QtCore.framework/versions/current/QtCore_debug
>>>
>>> Thoughts?
>>> ___________________________________________________________
>>> Mike Jackson                      www.bluequartz.net
>>> Principal Software Engineer       mike.jackson at bluequartz.net
>>> BlueQuartz Software               Dayton, Ohio
>>
>> Reading 
>> http://doc.trolltech.com/4.6/mac-differences.html#qt-libraries-as-frameworks seems 
>> to indicate that either setting DYLD_IMAGE_SUFFIX is one way to go, 
>> renaming the embedded library another. Not sure it would be all that 
>> desirable to explicitly link against the debug versions on Mac OS X...
>>
>> Michael
>
> Knowing how CMake was searching for the frameworks I ended up creating 
> some symlinks to the QtCore.framework and QtGui.framework.
> QtCore_debug.framework points to QtCore.framework and the same for the 
> other frameworks. This actually allowed CMake to find the debug 
> libraries. Once those libraries were found I could then actually link 
> against the debug versions. Which allows me to debug down into Qt 
> itself which is what I needed.
>    I agree that if you trust Qt and have no need to debug down into Qt 
> then linking against the Debug versions probably is not needed. 
> Setting the DYLD_IMAGE_SUFFIX environment variable to "_debug" caused 
> the launching of my app inside gdb to go from about 10 seconds to 2 
> minutes as gdb was trying to load the debug version of every library 
> that the app links against, plus all of their dependencies. By linking 
> directly to the debug versions of the Qt libraries the launch times 
> only increased a small amount.
>   I don't think there is really any type of patch that I could submit. 
> Merely creating the symlinks in the Qt/lib installation directory 
> seems to have solved the issue, at least for me.
>
Or you could rename the *_debug libs to _qtdebug then set 
DYLD_IMAGE_SUFFIX to _qtdebug.
That what I've done in the past to work around the debugging slowness.

Clint


More information about the CMake mailing list