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
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)
--

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