[CMake] Static/Shared library targets becomes Static/Shared configurations under VS9
Aurélien Vallée
vallee.aurelien at gmail.com
Sat Jul 4 10:03:58 EDT 2009
Hello,
I have some questions regarding CMake generator for VS9.
My library can be built as shared or static. Currently, this is handled
using two different targets in CMakeLists.txt.
The problem is that under Visual Studio 2008, those two targets are two
projects !
So in the solution explorer I have something like :
* MyLibrary_Solution
* Module1_static
* Module1_dynamic
* Module2_static
* Module2_dynamic
...
This is really annoying, since the source files are the same, only the
configuration changes (defines ...).
I wondered whether it would be possible to have those different targets
become different configurations.
I would like to have such configurations :
Static Debug
Static Release
Dynamic Debug
Dynamic Release
And such projects :
Module 1
Module 2
Module 3
...
Here is my CMakeLists.txt for a module (Windowing) :
############################## Minimum CMake version to run
> ###################
CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )
> ############################## Checks
> #########################################
IF ( NOT CMAKE_BUILD_TYPE )
SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Available build types: Debug |
> Release" FORCE )
ENDIF ( NOT CMAKE_BUILD_TYPE )
> ############################## Project name
> ###################################
PROJECT( Windowing )
> ############################## Preprocessor definitions
> #######################
IF ( CMAKE_SYSTEM_NAME STREQUAL "Darwin" ) # MacOS
ADD_DEFINITIONS( -DOMG_PLATFORM_MACOSX )
ELSEIF ( CMAKE_SYSTEM_NAME STREQUAL "Windows" ) # Windows
ADD_DEFINITIONS( -DOMG_PLATFORM_WINDOWS )
ELSEIF ( CMAKE_SYSTEM_NAME STREQUAL "Linux" ) # Linux
ADD_DEFINITIONS( -DOMG_PLATFORM_LINUX )
ENDIF ()
> ############################## Informative messages
> ###########################
MESSAGE( "--------------------------------------------------" )
MESSAGE( STATUS "Configuring project Windowing" )
MESSAGE( STATUS "Host system is ${CMAKE_SYSTEM_NAME}" )
MESSAGE( STATUS "Configuration is ${CMAKE_BUILD_TYPE}" )
> ############################## Sources
> ########################################
FILE( GLOB_RECURSE WindowingSources ./PrivateSource/*.cpp ) # Scan
> all source files
FILE( GLOB_RECURSE WindowingHeaders ./PrivateInclude/*.h ) # Scan
> all header files
FILE( GLOB_RECURSE WindowingInterfaces ../../Include/Windowing/*.h ) # Scan
> all interface files
> SOURCE_GROUP("Public Interfaces" FILES ${WindowingInterfaces})
SOURCE_GROUP("Private Headers" FILES ${WindowingHeaders})
SOURCE_GROUP("Private Sources" FILES ${WindowingSources})
############################## Includes
> #######################################
INCLUDE_DIRECTORIES( ../../Include ) # Public headers
INCLUDE_DIRECTORIES( ./PrivateInclude ) # Private headers
> ############################## Project generation
> #############################
ADD_LIBRARY( Windowing_static STATIC ${WindowingSources}
> ${WindowingHeaders} ${WindowingInterfaces} ) # Windowing_static libraries
ADD_LIBRARY( Windowing_dynamic MODULE ${WindowingSources}
> ${WindowingHeaders} ${WindowingInterfaces} ) # Windowing_dynamic libraries
> ############################## Target Properties
> ##############################
SET_TARGET_PROPERTIES( Windowing_static PROPERTIES LINKER_LANGUAGE CXX ) #
> Linker language is..
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES LINKER_LANGUAGE CXX ) #
> ..forced to C++
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES DEBUG_POSTFIX "d" ) #
> Debug libraries have..
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES DEBUG_POSTFIX "d" ) #
> ..a trailing "d"
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES RELEASE_POSTFIX "" ) #
> Release libraries have..
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES RELEASE_POSTFIX "" ) #
> ..no postfix
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES PREFIX "" ) # We
> don't want..
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES PREFIX "" ) # ..the
> "lib" prefix
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES
> ARCHIVE_OUTPUT_DIRECTORY ../../Build/Static${CMAKE_BUILD_TYPE} )
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES LIBRARY_OUTPUT_DIRECTORY
> ../../Build/Dynamic${CMAKE_BUILD_TYPE} )
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES OUTPUT_NAME "Windowing"
> )
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES OUTPUT_NAME "Windowing"
> )
> SET_TARGET_PROPERTIES( Windowing_static PROPERTIES
> COMPILE_DEFINITIONS_DEBUG OMG_DEBUG
COMPILE_DEFINITIONS_RELEASE
> OMG_RELEASE )
SET_TARGET_PROPERTIES( Windowing_dynamic PROPERTIES
> COMPILE_DEFINITIONS_DEBUG OMG_DEBUG
COMPILE_DEFINITIONS_RELEASE
> OMG_RELEASE )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090704/db58dc33/attachment-0001.htm>
More information about the CMake
mailing list