Re: [CMake] detecting build configuration in Visual Studio
Many thanks for your valuable feedback. I will be trying this solution out. Regards, Dominik On Wed, Feb 16, 2011 at 2:33 AM, Michael Hertling wrote: > On 02/15/2011 03:49 PM, Dominik Szczerba wrote: >> In MSVC I need to link different libraries depending on the chosen >> build type. I have two questions: >> >> 1) If and how can I register my own build types > >>> http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_specify_my_own_configurations_.28for_generators_that_allow_it.29_.3F > >> 2) How can I detect which one I am in for conditional linking > > AFAIK, you can't, but you might do the following: Declare the differing > libraries for the different configurations as IMPORTED libraries and > set the IMPORTED_LOCATION_ properties accordingly, e.g.: > > ADD_LIBRARY(xyz SHARED IMPORTED) > SET_TARGET_PROPERTIES(xyz PROPERTIES > IMPORTED_LOCATION_CUSTOMIZED "..." > IMPORTED_LOCATION_RELEASE "..." > IMPORTED_LOCATION_DEBUG "..." > ... > ) > ... > TARGET_LINK_LIBRARIES(... xyz ...) > > If such a library should not be taken into account for a particular > configuration at all, things are more complex since you can't declare > an empty IMPORTED_LOCATION. A possible approach might look as follows: > > CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) > PROJECT(IMPORTEDDUMMY C) > ADD_LIBRARY(dummy STATIC "") > SET_TARGET_PROPERTIES(dummy PROPERTIES LINKER_LANGUAGE C) > EXPORT(TARGETS dummy NAMESPACE imported FILE importeddummy.cmake) > INCLUDE(${CMAKE_BINARY_DIR}/importeddummy.cmake) > SET_TARGET_PROPERTIES(importeddummy PROPERTIES > IMPORTED_LINK_INTERFACE_LIBRARIES_CUSTOMIZED "..." > ) > FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n") > ADD_EXECUTABLE(main main.c) > TARGET_LINK_LIBRARIES(main importeddummy) > > The target "dummy" is an empty static library and needed as anchor for > an imported static library "importeddummy" which refers to the former; > this is achieved by EXPORT() and the generated "importeddummy.cmake" > file. Finally, the importeddummy target is associated with additional > libraries via the IMPORTED_LINK_INTERFACE_LIBRARIES_ property. > This property is the reason for the intermediate importeddummy target > since it can't be imposed on non-imported ones. At the end of the day, > the additional libraries appear in the link command line only for the > CUSTOMIZED configuration. Maybe, it would be worth a feature request > to drop an imported library from the link command line completely if > there's no IMPORTED_LOCATION for the active configuration instead of > having "make" raise an error. > > 'hope that helps. > > Regards, > > Michael > ___ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://www.cmake.org/mailman/listinfo/cmake > > ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
Re: [CMake] detecting build configuration in Visual Studio
On 02/15/2011 03:49 PM, Dominik Szczerba wrote: > In MSVC I need to link different libraries depending on the chosen > build type. I have two questions: > > 1) If and how can I register my own build types >> http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_specify_my_own_configurations_.28for_generators_that_allow_it.29_.3F > 2) How can I detect which one I am in for conditional linking AFAIK, you can't, but you might do the following: Declare the differing libraries for the different configurations as IMPORTED libraries and set the IMPORTED_LOCATION_ properties accordingly, e.g.: ADD_LIBRARY(xyz SHARED IMPORTED) SET_TARGET_PROPERTIES(xyz PROPERTIES IMPORTED_LOCATION_CUSTOMIZED "..." IMPORTED_LOCATION_RELEASE "..." IMPORTED_LOCATION_DEBUG "..." ... ) ... TARGET_LINK_LIBRARIES(... xyz ...) If such a library should not be taken into account for a particular configuration at all, things are more complex since you can't declare an empty IMPORTED_LOCATION. A possible approach might look as follows: CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) PROJECT(IMPORTEDDUMMY C) ADD_LIBRARY(dummy STATIC "") SET_TARGET_PROPERTIES(dummy PROPERTIES LINKER_LANGUAGE C) EXPORT(TARGETS dummy NAMESPACE imported FILE importeddummy.cmake) INCLUDE(${CMAKE_BINARY_DIR}/importeddummy.cmake) SET_TARGET_PROPERTIES(importeddummy PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES_CUSTOMIZED "..." ) FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n") ADD_EXECUTABLE(main main.c) TARGET_LINK_LIBRARIES(main importeddummy) The target "dummy" is an empty static library and needed as anchor for an imported static library "importeddummy" which refers to the former; this is achieved by EXPORT() and the generated "importeddummy.cmake" file. Finally, the importeddummy target is associated with additional libraries via the IMPORTED_LINK_INTERFACE_LIBRARIES_ property. This property is the reason for the intermediate importeddummy target since it can't be imposed on non-imported ones. At the end of the day, the additional libraries appear in the link command line only for the CUSTOMIZED configuration. Maybe, it would be worth a feature request to drop an imported library from the link command line completely if there's no IMPORTED_LOCATION for the active configuration instead of having "make" raise an error. 'hope that helps. Regards, Michael ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
[CMake] detecting build configuration in Visual Studio
In MSVC I need to link different libraries depending on the chosen build type. I have two questions: 1) If and how can I register my own build types 2) How can I detect which one I am in for conditional linking Many thanks for any hints, Dominik ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake