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