[CMake] MacOSX Framework handling

Daniel Franke franke.daniel at gmail.com
Sun Jul 22 14:33:27 EDT 2012


Hi all.

I try to set install/package a cmake project on MacOSX. Questions first, 
please find the details below.

 - does cmake support multiple .dylib in a single framework? (do Frameworks
   support this at all?)
 - does cmake support Umbrella Frameworks (umbrella Frameworks may contain
   other Frameworks [1])?
 - how to include header files in Frameworks?

The information I found via google is from 2010 or older and mostly about work 
in progress [2]. Pointers or suggestions on Mac packaging would be highly 
welcome.

Thanks

	Daniel


[1] 
https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html
[2] http://www.cmake.org/Wiki/CMake:MacOSX_Frameworks


--
This is were I come from: in my project, there are two GUI applications (.app 
bundles) that depend on Qt4, one console application (not a bundle) and a 
bunch of shared libraries/frameworks between the three. 

Options I considered so far:
 * embedded dependencies in bundles using BundleUtilities/DeployQt4
    -> two copies of Qt and project libraries, one each for the GUI bundles,
       but the console program doesn't have a .app directory to store its
       dependencies?!

 * prepare an installation folder like:
     - foo.app/...
     - bar.app/...
     - bin/console_prog
     - Frameworks/...
    -> doesn't work as the Frameworks require "fixing up", i.e. setting
       the "@executable_path" to find other frameworks: *.app and bin/*
       require different paths here

 * install shared libraries to /usr/lib and forget about Frameworks
    -> not the Mac way, but would probably work

 * install Frameworks to /Library/Frameworks
    -> the Mac way, should work

So, although I wanted to keep everything in one directory for simple uninstall 
(remove the directory), I guess I have to distribute the files across the file 
system. Now, instead of installing 5+ specific shared libraries or frameworks, 
I'd like to have one ${project}.framework instead that contains all the 
.dylibs or all the other frameworks ...



More information about the CMake mailing list