Use the "SHARED" library type for your shared library and "MODULE" for your
plugin.
Have you downloaded the Qt example from the Wiki? It shows what you need to do.
The terse summary of how some of us do it is this:
Write a configurable *.cmake.in file that gets configured at cmake time. An
install rule is also added that executes the .cmake file at install time.
inside this file is cmake code to over ride some CMake functions for your use
and then include the BundleUtilities. And then call "fixup_bundle". The tail
end of my own file looks like this:
# -- Run the BundleUtilities cmake code
include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app"
# Plugins to Install
"${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqgif.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqjpeg.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/imageformats/libqtiff.dylib;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/libEMMPMPlugin_debug.plugin;${CMAKE_INSTALL_PREFIX}/IPHelperApp_debug.app/Contents/plugins/libCrossCorrelationPlugin_debug.plugin"
# Directories to Search for Libraries
"/Users/mjackson/Workspace/IPHelper/Build/Bin;/Users/mjackson/Workspace/IPHelper/Build/Bin"
)
This is for a Qt based project where I need some of the Qt plugins for image
loading and I have produced my own plugins that need to get copied into the
application bundle. Note that this will get called at INSTALL time NOT at build
time. You should have code in your main executable that looks for the plugins
in a few locations so your executable will work from both the build directory
and the installed location. Again, if you happen to be working with Qt I can
share some code that I use.
If you take a look at
http://scm.bluequartz.net/support-libraries/cmp/trees/master there are some
Macros (cmpCMakeMacros.cmake) that I use in my project. There is also the
example configured file in the OSX_Tools directory (CompleteBundle.cmake.in).
The "cmp" project is just a collection of CMake code that I use over and over
in all my projects so I just made a Git module out of it and I use it as a git
submodule in all my projects.
___________________________________________________________
Mike Jackson www.bluequartz.net
Principal Software Engineer [email protected]
BlueQuartz Software Dayton, Ohio
On Apr 19, 2011, at 11:21 AM, tog wrote:
> Hi Mike
>
> Thanks for this very helpful answer.
> I am nevertheless still facing few problems. My project contains:
> - a shared library
> - an executable using the shared lib
> - a plugin lib (loaded using dylib)
>
> I have modified my exec target to be
> ADD_EXECUTABLE(main MACOSX_BUNDLE main.cpp sub.cpp)
> then I have something like
> INSTALL(TARGETS main BUNDLE DESTINATION Applications RUNTIME)
>
> the make install does create Application.app and add the main exec.
>
> Fir the lib I am facing 2 problems:
> 1- I don't understand how to add them to the bundle. They are both
> created using:
>
> ADD_LIBRARY(foo ${EXAMPLE_LIBRARY_TYPE} foo.cpp)
> EXAMPLE_LIBRARY_TYPE=SHARED
>
> INSTALL(TARGETS foo
> RUNTIME DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> RuntimeLibraries
> LIBRARY DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> RuntimeLibraries
> ARCHIVE DESTINATION ${EXAMPLE_INSTALL_LIB_DIR} COMPONENT
> Development
>
> nothing is added to the app.
>
> 2- According to the doc. For a library loaded at runtime the doc
> suggests to use MODULE but I end up having this error. Is that
> supported on Mac
>
> Linking CXX shared module libplugin.so
> cd /Users/alleon/PROJECTS/example_build/plugin && "/Applications/CMake
> 2.8-4.app/Contents/bin/cmake" -E cmake_link_script
> CMakeFiles/plugin.dir/link.txt --verbose=1
> /usr/bin/c++ -bundle -Wl,-headerpad_max_install_names
> -compatibility_version 1.0.0 -current_version 1.2.3 -o
> libplugin.1.2.3.so CMakeFiles/plugin.dir/plugin.cpp.o
> i686-apple-darwin10-g++-4.2.1: -compatibility_version only allowed
> with -dynamiclib
> make[2]: *** [plugin/libplugin.1.2.3.so] Error 1
>
>
> Thanks
> Guillaume
>
>
> On Sat, Apr 16, 2011 at 6:51 PM, Michael Jackson
> <[email protected]> wrote:
>> You need to process your executable with "install_name_tool" either manually
>> or using the "BundleUtilities" functionality built into CMake. Note that
>> there is a bug in the current CMake 2.8.4 that will NOT allow
>> bundleUtilities to work on a command line type app. Your app MUST be in a
>> .app bundle. If you search for BUndleUtilities on the Wiki there is a small
>> Qt based project that shows a simple use of BundleUtilities.
>>
>> Hope that helps.
>> ___________________________________________________________
>> Mike Jackson www.bluequartz.net
>> Principal Software Engineer [email protected]
>> BlueQuartz Software Dayton, Ohio
>>
>>
>>
>> On Apr 15, 2011, at 7:17 AM, tog wrote:
>>
>>> Dear all
>>>
>>> I have a project in which I would like to use rpath on Mac OS.
>>> Everything is going fine if I am building everything manually (i.e.
>>> without CMake)
>>>
>>> With CMake all is fine for the libs between the build and the
>>> installation, all libs are processed with install_name_tool.
>>> But nothing is done for the executable (checked from cmake_install.cmake)
>>>
>>> In the build phase, I don't see any -Wl,-rpath,... added on the command
>>> line.
>>>
>>> What do I miss there ?
>>>
>>> I have been using:
>>>
>>> SET(CMAKE_SKIP_BUILD_RPATH FALSE)
>>> SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
>>> SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
>>> SET(CMAKE_INSTALL_RPATH "${EXAMPLE_INSTALL_LIB_DIR}")
>>>
>>> as indicated in the Wiki.
>>>
>>> Is there tool on the Mac to get rpath from the executable ?
>>>
>>>
>>> Thanks for your help
>>> Guillaume
>>>
>>> --
>>> PGP KeyID: 2048R/EA31CFC9 subkeys.pgp.net
>>> _______________________________________________
>>> 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
>>
>>
>
>
>
> --
> PGP KeyID: 2048R/EA31CFC9 subkeys.pgp.net
_______________________________________________
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