[CMake] Not sure how to list C# files in the generated Visual Studio project

Stephen Torri stephen.torri at gmail.com
Mon Sep 26 11:37:23 EDT 2011


I am using CMake to run SWIG to generate C# wrapper files for a
project. While the attached CMakeLists.txt file produces a Visual
Studio solutions that builds the C++ library, C# wrapper library and
C# prototype executable I don't know first if I am using CMake
correctly in this case. Secondly I am not sure what to do to list the
C# files in the visual studio project so that I can quickly go to a
the definition of a C# type for example. I would appreciate any
feedback on how to improve the CMakeLists.txt file.

Stephen
-------------- next part --------------
cmake_minimum_required ( VERSION 2.6 )

# user section
PROJECT(MyProject)

#-----------------------------------------------------
#                 FIND PACKAGES
#-----------------------------------------------------
SET(MYPROJECT_MAJOR_VERSION 0)
SET(MYPROJECT_MINOR_VERSION 1)
SET(MYPROJECT_BUILD_VERSION 0)
SET(MYPROJECT_VERSION
	"${MYPROJECT_MAJOR_VERSION}.${MYPROJECT_MINOR_VERSION}.${MYPROJECT_BUILD_VERSION}")
SET(MYPROJECT_API_VERSION
    "${MYPROJECT_MAJOR_VERSION}.${MYPROJECT_MINOR_VERSION}")
SET(MYPROJECT_LIBRARY_PROPERTIES ${MYPROJECT_LIBRARY_PROPERTIES}
 VERSION "${MYPROJECT_VERSION}"
 SOVERSION "${MYPROJECT_API_VERSION}")

#-----------------------------------------------------
#                 FIND PACKAGES
#-----------------------------------------------------
SET(MyProject_CMAKE_DIR "${MyProject_SOURCE_DIR}/CMake" CACHE INTERNAL "")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${MyProject_CMAKE_DIR}")

IF(WIN32)
   SET(Boost_USE_STATIC_LIBS ON)
   SET(Boost_USE_MULTITHREADED ON)
   SET(Boost_USE_STATIC_RUNTIME OFF)
ENDIF(WIN32)

SET(BOOST_ROOT "C:/boost" CACHE PATH "Top directory of boost installation")
FIND_PACKAGE(Boost 1.45)

#-----------------------------------------------------
#                 SHARED / STATIC
#-----------------------------------------------------

# Allow the developer to select if Dynamic or Static libraries are built
OPTION(BUILD_SHARED_LIBS "Build shared libraries." OFF)

# Set the LIB_TYPE variable to STATIC
SET (LIB_TYPE STATIC)
IF (BUILD_SHARED_LIBS)
  # User wants to build Dynamic Libraries, so change the LIB_TYPE variable to CMake keyword 'SHARED'
  SET (LIB_TYPE SHARED)
  IF(WIN32)
    SET (BUILD_SHARED_WIN32 1)
  ENDIF(WIN32)
ENDIF (BUILD_SHARED_LIBS)

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/config.hpp)

#-----------------------------------------------------
#                   FILES
#-----------------------------------------------------
SET ( HEADERS
  MyProject_Interface.hpp
  Julian.hpp
  Longitude.hpp
  Latitude.hpp
  Terrain_Resolution.hpp )

SET (SOURCE
  MyProject_Interface.cpp )

#-----------------------------------------------------
#                   BUILD
#-----------------------------------------------------
include_directories(${Boost_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} )

add_library ( MyProject ${SOURCE} ${HEADERS} )

target_link_libraries ( MyProject ${Boost_LIBRARIES} )

#-----------------------------------------------------
#                   SWIG
#-----------------------------------------------------
IF (BUILD_SHARED_LIBS)
	FIND_PACKAGE(SWIG REQUIRED)
	MARK_AS_ADVANCED ( SWIG_DIR SWIG_EXECUTABLE SWIG_VERSION )
	INCLUDE(${SWIG_USE_FILE})

	FIND_PACKAGE(CSharp REQUIRED)
	INCLUDE(${CSharp_USE_FILE})
 
	# Configuration
	#---------------
	SET_SOURCE_FILES_PROPERTIES(SWIG_MyProject_Interface.i PROPERTIES CPLUSPLUS ON)

	SET ( CMAKE_SWIG_OUTDIR "${CMAKE_CURRENT_BINARY_DIR}" )
	
	SET ( CMAKE_SWIG_FLAGS "-namespace MyProject -dllimport MyProjectInterface" )
	SEPARATE_ARGUMENTS ( CMAKE_SWIG_FLAGS )
	
	CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/AssemblyInfo.cs.in
		${CMAKE_CURRENT_BINARY_DIR}/AssemblyInfo.cs
		@ONLY)
	
	# libMyProjectInterface.so
	#---------------
	link_directories ( ${Boost_LIBRARY_DIRS} )
	SWIG_ADD_MODULE(MyProjectInterface csharp SWIG_MyProject_Interface.i)
	SWIG_LINK_LIBRARIES(MyProjectInterface MyProject ${Boost_LIBRARIES})

    IF(UNIX)
      SET_TARGET_PROPERTIES(${SWIG_MODULE_MyProjectInterface_REAL_NAME} PROPERTIES PREFIX "lib")
    ENDIF(UNIX)
    SET_TARGET_PROPERTIES(${SWIG_MODULE_MyProjectInterface_REAL_NAME} PROPERTIES LINK_INTERFACE_LIBRARIES "")	
	
	# Add custom command to build libMyProjectInterface.so
	#---------------
	ADD_CUSTOM_COMMAND(
	  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll
	  COMMAND ${CMAKE_CSHARP_COMPILER} ARGS "/t:library" "/out:${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll" "*.cs"
	  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
	  DEPENDS "${swig_generated_file_fullname}" 
	    ${CMAKE_CURRENT_BINARY_DIR}/AssemblyInfo.cs
	  COMMENT "csc *.cs")
	  
	ADD_CUSTOM_TARGET(MyProjectCSharp ALL
	  DEPENDS
	    ${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll
	    ${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll.config
	    COMMENT "building MyProject-csharp.dll"
	  )
	  
	# building HelloCSharpWorld:
	ADD_CUSTOM_COMMAND(
	  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/HelloCsharpWorld.exe
	  COMMAND ${CMAKE_CSHARP_COMPILER} ARGS "/r:${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll" "/out:${CMAKE_CURRENT_BINARY_DIR}/HelloCsharpWorld.exe" ${CMAKE_CURRENT_SOURCE_DIR}/HelloCsharpWorld.cs
	  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
	  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/MyProject-csharp.dll
	  ${CMAKE_CURRENT_SOURCE_DIR}/HelloCsharpWorld.cs
	  COMMENT "Create HelloCsharpWorld.exe" )
	
	 ADD_CUSTOM_TARGET(MYPROJECTSharpExample ALL
	   DEPENDS
	   ${CMAKE_CURRENT_BINARY_DIR}/HelloCsharpWorld.exe
	   COMMENT "building HelloCsharpWorld.exe" )
	   
ENDIF (BUILD_SHARED_LIBS)


More information about the CMake mailing list