[CMake] How to add plugins to MAC OSX Application bundles?

Kenny Erleben kenny at diku.dk
Wed Apr 6 03:43:33 EDT 2011


Hi all,

I am trying to extend my CMake setup to properly make a max osx 
application bundle.

I figured out how to use SET_SOURCE_FILES_PROPERTIES with 
MACOSX_PACKAGE_LOCATION and SET_TARGET_PROPERTIES for doing most of the 
stuff. However, I can not get my generated Xcode project to copy plugins 
into the application bundle. I was wondering what I am doing wrong?

The CMake snippet below sketch the steps that I am doing. Could somebody 
please tell me what is wrong? or if there is an easier way of doing this?

best regards

Kenny

-----------------------------------------------------------------------------

IF(APPLE)

   # Mac OS X bundle specific settings
   set(MACOSX_BUNDLE true)
   set(MACOSX_BUNDLE_BUNDLE_NAME ${MY_APP_NAME})
   set(MACOSX_BUNDLE_INFO_STRING "${MY_APP_NAME} ${MY_APP_VERSION}")
   set(MACOSX_BUNDLE_LONG_VERSION_STRING "${MY_APP_VERSION}")
   set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${MY_APP_VERSION}")
   set(MACOSX_BUNDLE_BUNDLE_VERSION "${MY_APP_VERSION}")
   set(MACOSX_BUNDLE_ICON_FILE "${PROJECT_SOURCE_DIR}/${MY_APP_NAME}.icns")

   # Locate all recourses
   FILE(GLOB COPY_RESOURCES ${PROJECT_SOURCE_DIR}/bin/*.cfg)
   SET_SOURCE_FILES_PROPERTIES(
     "${COPY_RESOURCES}"
     PROPERTIES
     MACOSX_PACKAGE_LOCATION Resources
   )

   # Find all frameworks
   FIND_LIBRARY(
     OGRE_FWK  Ogre
     ${OGRE_FRAMEWORK_PATH}
     DOC "The path to Ogre.Framework"
     )
   FIND_LIBRARY(
     OIS_FWK  OIS
     ${OIS_FRAMEWORK_PATH}
     DOC "The path to OIS.Framework"
     )
   SET(COPY_FRAMEWORKS  ${OGRE_FWK} ${OIS_FWK})
   SET_SOURCE_FILES_PROPERTIES(
     ${COPY_FRAMEWORKS}
     PROPERTIES
     MACOSX_PACKAGE_LOCATION Frameworks
     )

   # Find all plugins
   SET(
     PLUGING_NAMES
     "RenderSystem_GL"
     "Plugin_ParticleFX"
     "Plugin_BSPSceneManager"
     "Plugin_CgProgramManager"
     "Plugin_PCZSceneManager"
     "Plugin_OctreeZone"
     "Plugin_OctreeSceneManager"
     )
   FOREACH(name ${PLUGING_NAMES})
     IF(EXISTS ${OGRE_${name}_LIBRARY_REL})
       SET(COPY_PLUGINS  ${COPY_PLUGINS} ${OGRE_${name}_LIBRARY_REL})
     ENDIF()
     IF(EXISTS ${OGRE_${name}_LIBRARY_DBG})
       SET(COPY_PLUGINS  ${COPY_PLUGINS} ${OGRE_${name}_LIBRARY_DBG})
     ENDIF()
   ENDFOREACH(name)

   # Kenny : This does not quite seem to work as it should with Xcode?
   SET_SOURCE_FILES_PROPERTIES(
     "${COPY_PLUGINS}"
     PROPERTIES
     MACOSX_PACKAGE_LOCATION PlugIns
     )

ENDIF(APPLE)


INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR} )

FILE(GLOB SRCS *.cpp )
FILE(GLOB  HDRS *.h  )

ADD_EXECUTABLE(
   ${MY_APP_NAME}
   MACOSX_BUNDLE
   ${SRCS}
   ${HDRS}
   ${COPY_RESOURCES}
   ${COPY_FRAMEWORKS}
   ${COPY_PLUGINS}
   )

IF(APPLE)

   # Add resources to application bundle target
   SET_TARGET_PROPERTIES(
     ${MY_APP_NAME}
     PROPERTIES
     RESOURCE "${COPY_RESOURCES}"
     )

ENDIF(APPLE)



More information about the CMake mailing list