On 30. Jul, 2010, at 14:16 , John Drescher wrote:

>> Please do explain. How would this work? What would the API be? And now it 
>> suddenly sounds like CMake isn't supposed to do everything automagically 
>> anymore. If that is the case, please RTFM and look into the OUTPUT_NAME 
>> target property. It offers exactly what you want!
>> 
> 
> Or the prefix variables.
> 
> I have the following in a file called NamingConvention.cmake.
> 
> IF(MSVC)
>       
>       IF(MSVC90)
>               SET(CMAKE_DEBUG_POSTFIX "_d_2008")
>               SET(CMAKE_RELEASE_POSTFIX "_2008")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX "_2008")
>       ENDIF(MSVC90)
>       
>       IF(MSVC80)
>               SET(CMAKE_DEBUG_POSTFIX "_d_2005")
>               SET(CMAKE_RELEASE_POSTFIX "_2005")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX "_2005")
>       ENDIF(MSVC80)
>       
>       IF(MSVC71)
>               SET(CMAKE_DEBUG_POSTFIX "_d_2003")
>               SET(CMAKE_RELEASE_POSTFIX "_2003")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX "_2003")
>       ENDIF(MSVC71)
>       
>       IF(MSVC70)
>               SET(CMAKE_DEBUG_POSTFIX "_d_2002")
>               SET(CMAKE_RELEASE_POSTFIX "_2002")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX "_2002")
>       ENDIF(MSVC70)
>       
>       IF(MSVC60)
>               SET(CMAKE_DEBUG_POSTFIX "_d_vc6")
>               SET(CMAKE_RELEASE_POSTFIX "_vc6")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX "_vc6")
>       ENDIF(MSVC60)
>       
>       #Name 64bit libaraies differenly
>       IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>               SET(CMAKE_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}_x64")
>               SET(CMAKE_RELEASE_POSTFIX "${CMAKE_RELEASE_POSTFIX}_x64")
>               SET(CMAKE_RELWITHDEBINFO_POSTFIX 
> "${CMAKE_RELWITHDEBINFO_POSTFIX}_x64")
>               
>               IF(DETECT_64BIT_PORTABILITY)
>                       SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wp64")
>               ENDIF(DETECT_64BIT_PORTABILITY)
>       ENDIF(CMAKE_SIZEOF_VOID_P MATCHES 8)
>               
> ENDIF(MSVC)
> 
> To activate the naming convention for any of my projects I just call
> include(CMake\NamingConvention.cmake) in the top of my CMakeLists.txt
> and my libraries all have decorated names that distinguish between
> compiler name and 32/64 bit. If I wanted I could spend 5 minutes and
> add gcc and other defined compilers to this.
> 
> John

Thanks, finally. Olaf, do you see how simple it is? And this code could be 
shortened by a mile:

if(MSVC90)
  set(comp_suffix _2008)
elseif(MSVC80)
  set(comp_suffix _2005)
elseif(MSVC71)
  set(comp_suffix _2003)
elseif(MSVC70)
  set(comp_suffix _2002)
elseif(MSVC60)
  set(comp_suffix _vc6)
endif()
set(arch_suffix)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  set(arch_suffix _x64)
  # THIS IS SPECIFIC TO JOHN'S PROJECT
  if(DETECT_64BIT_PORTABILITY)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Wp64")
  endif()
endif()
set(CMAKE_DEBUG_POSTFIX          _d${comp_suffix}${arch_suffix})
set(CMAKE_RELEASE_POSTFIX          ${comp_suffix}${arch_suffix})
set(CMAKE_RELWITHDEBINFO_POSTFIX   ${comp_suffix}${arch_suffix})
set(CMAKE_MINSIZEREL_POSTFIX       ${comp_suffix}${arch_suffix})

You can extend this to your hearts content...
_______________________________________________
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

Reply via email to