[CMake] TARGET_LINK_LIBRARIES debug optimized visual studio 2010

Michael Hertling mhertling at online.de
Fri Jul 29 18:06:17 EDT 2011


On 07/29/2011 06:22 PM, Louis Hoefler wrote:
> I tried that and now I get
> for the debug libraries:
> ...;wtdwthttpd.lib;...
> for the release libraries:
> ...;wtwthttp.lib;...
> 
> I want it to look like
> ...;wt.lib;wthttp.lib;... or ...;wtd.lib;wthttpd.lib;...
> my version somehow adds one release
> library to the debug configuration and
> vice versa (...;wthttpd.lib;wt.lib;wthttp.lib;...).
> 
> Sorry for not mentioning this.
> Thank you, Louis
> 
> Am 29.07.2011 18:12, schrieb David Cole:
>> Don't put a space in between the "wt" and the "${BACKENDLIB}" ... ?
>>
>> Use this instead:
>>
>> IF(WIN32)
>>   TARGET_LINK_LIBRARIES(construction.wt
>>    debug wtd${BACKENDLIB}d
>>    optimized wt${BACKENDLIB})
>> ELSE(WIN32)
>>   TARGET_LINK_LIBRARIES(construction.wt wt${BACKENDLIB})
>> ENDIF(WIN32)
>>
>> Just a guess since I don't really know what you're expecting...
>>
>>
>> On Fri, Jul 29, 2011 at 12:02 PM, Louis Hoefler<louis.hoefler at gmx.de>  wrote:
>>> Hello everyone.
>>> I try to set a specific library for the debug and release configuration.
>>>
>>> I try to do it this way:
>>> IF(DEFINED USEFCGI)
>>>   SET(BACKENDLIB wtfcgi)
>>> ELSE(DEFINED USEFCGI)
>>>   SET(BACKENDLIB wthttp)
>>> ENDIF(DEFINED USEFCGI)
>>>
>>> IF(WIN32)
>>>   TARGET_LINK_LIBRARIES(construction.wt
>>>   debug wtd ${BACKENDLIB}d
>>>   optimized wt ${BACKENDLIB})
>>> ELSE(WIN32)
>>>   TARGET_LINK_LIBRARIES(construction.wt wt ${BACKENDLIB})
>>> ENDIF(WIN32)

TARGET_LINK_LIBRARIES()'s debug/optimized/general keywords apply to
their following argument only: 'A "debug", "optimized", or "general"
keyword indicates that the library immediately following it is to be
used only for the corresponding build configuration.' [Documentation
of TARGET_LINK_LIBRARIES()]. So, your use of TARGET_LINK_LIBRARIES()
yields exactly what's expected/documented. Instead, it should read:

TARGET_LINK_LIBRARIES(construction.wt
    debug wtd debug ${BACKENDLIB}d
    optimized wt optimized ${BACKENDLIB})

However, you should definitely prefer the more powerful approach of
imported targets that is mainly intended for such linking concerns:

ADD_LIBRARY(wt SHARED IMPORTED)
ADD_LIBRARY(backendlib SHARED IMPORTED)
SET_TARGET_PROPERTIES(wt PROPERTIES
    IMPORTED_LOCATION_DEBUG "wtd"
    IMPORTED_LOCATION "wt")
SET_TARGET_PROPERTIES(backendlib PROPERTIES
    IMPORTED_LOCATION_DEBUG "${BACKENDLIB}d"
    IMPORTED_LOCATION "${BACKEND}")
TARGET_LINK_LIBRARIES(construction.wt wt backendlib)

Regards,

Michael


More information about the CMake mailing list