CMake:Bundles And Frameworks: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Replace content with link to new CMake community wiki)
 
(41 intermediate revisions by 10 users not shown)
Line 1: Line 1:
==Issue==
{{CMake/Template/Moved}}


(In all examples, the applications are named appl1, appl2, ...,
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/platform_dependent_issues/Bundles-And-Frameworks here].
libraries are named libr1, libr2, ..., header files are named appl1_header1, appl2_header2, libr1_header1, ...,
and there are auxilary files associated with application and library appl1_aux1, appl2_aux2, libr1_aux1, ....
and some resource files associated with application and library appl1_res1, appl2_res2, libr1_res1, ....
All versions are ver1, ver2, ...)
 
On Mac there are several different cases of combinations of bundles, frameworks, and unix tools.
 
The problem is that CMAKE_INSTALL_PREFIX is not enough. Also, when creating bundles and frameworks, auxilary files should be in the proper subdirectory structure.
 
==Cases==
 
===Unix tools only===
* No issues (just like any other unix)
 
===Bundle only===
* Everything in a same directory:
 
<pre>
/Applications/
            appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                  appl1 -> appl1-1
                                  appl1-1
                                  appl1_aux1
                                  appl1_aux2
                              Resources/
                                  appl1_res1
                                  appl1_res2
</pre>
 
* Suggested api:
 
<pre>
ADD_EXECUTABLE(
  appl1
  MACOSX_BUNDLE
  appl1_src1.cxx
  appl1_src2.cxx
  ...
  MACOSX_BUNDLE_CONTENT
  apple1_aux1
  apple1_aux2
  apple1_res1
  apple1_res2
  )
 
SET_SOURCE_FILES_PROPERTIES(
  apple1_aux1
  apple1_aux2
  PROPERTIES
  MACOSX_BUNDLE_LOCATION MacOSX
  )
SET_SOURCE_FILES_PROPERTIES(
  apple1_res1
  apple1_res2
  PROPERTIES
  MACOSX_BUNDLE_LOCATION Resources
  )
</pre>
 
===Framework only===
* Everything in a same directory:
 
<pre>
/Library/
        Frameworks/
                  libr1.framework/
                                libr1    -> Versions/Current/libr1
                                Resources -> Versions/Current/Resources
                                Libraries -> Versions/Current/Libraries
                                Headers  -> Versions/Current/Headers
                                Versions/
                                        Current -> ver2
                                        ver2/
                                            libr1
                                            Resources/
                                                      Info.plist
                                                      version.plist
                                            Libraries/
                                                      libr2.dylib
                                                      libr3.dylib
                                            Headers/
                                                    libr1_header1.h
                                                    libr1_header2.h
                                                    libr1_header3.h
</pre>
 
===Bundle + Framework===
* Bundle stuff in one directory, framework stuff in another one
 
<pre>
/Applications/
            appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                  appl1 -> appl1-ver1
                                  appl1-ver2
                                  appl1_aux1
                                  appl1_aux2
                              Resources/
                                  appl1_res1
                                  appl1_res2
/Library/
        Frameworks/
                  libr1.framework/
                                libr1    -> Versions/Current/libr1
                                Resources -> Versions/Current/Resources
                                Libraries -> Versions/Current/Libraries
                                Headers  -> Versions/Current/Headers
                                Versions/
                                        Current -> ver2
                                        ver2/
                                            libr1
                                            Resources/
                                                      Info.plist
                                                      version.plist
                                            Libraries/
                                                      libr2.dylib
                                                      libr3.dylib
                                            Headers/
                                                    libr1_header1.h
                                                    libr1_header2.h
                                                    libr1_header3.h
</pre>
 
===Bundle + Unix tools===
* Bundle stuff in one directory, unix tools in typical unix location
 
<pre>
/Applications/
            appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                  appl1 -> appl1-ver1
                                  appl1-ver2
                                  appl1_aux1
                                  appl1_aux2
                              Resources/
                                  appl1_res1
                                  appl1_res2
 
/usr/
    bin/
      appl2
    share/
      appl2-version/
                    appl2_aux1
                    appl2_aux2
</pre>
 
===Framework + Unix tools===
* Framework stuff in one directory, unix tools in typical unix location
 
<pre>
/Library/
        Frameworks/
                  libr1.framework/
                                libr1    -> Versions/Current/libr1
                                Resources -> Versions/Current/Resources
                                Libraries -> Versions/Current/Libraries
                                Headers  -> Versions/Current/Headers
                                Commands  -> Versions/Current/Commands
                                Versions/
                                        Current -> ver2
                                        ver2/
                                            libr1
                                            Resources/
                                                      Info.plist
                                                      version.plist
                                            Libraries/
                                                      libr2.dylib
                                                      libr3.dylib
                                            Headers/
                                                    libr1_header1.h
                                                    libr1_header2.h
                                                    libr1_header3.h
                                            Commands/
                                                    appl2
                                            bin/
                                                appl3
/usr/
    bin/
      appl1
      appl2 -> /Library/Frameworks/libr1.framework/Commands/appl2
      appl3 -> /Library/Frameworks/libr1.framework/Version/ver1/bin/appl3
    share/
      appl1-version/
                    appl1_aux1
                    appl1_aux2
</pre>
 
===Bundle + Framework + Unix tools===
* Framework stuff in one directory, unix tools in typical unix location
 
<pre>
/Applications/
            appl1.app/
                      Contents/
                              Info.plist
                              MacOS/
                                  appl1 -> appl1-ver1
                                  appl1-ver2
                                  appl1_aux1
                                  appl1_aux2
                              Resources/
                                  appl1_res1
                                  appl1_res2
/Library/
        Frameworks/
                  libr1.framework/
                                libr1    -> Versions/Current/libr1
                                Resources -> Versions/Current/Resources
                                Libraries -> Versions/Current/Libraries
                                Headers  -> Versions/Current/Headers
                                Commands  -> Versions/Current/Commands
                                Versions/
                                        Current -> ver2
                                        ver2/
                                            libr1
                                            Resources/
                                                      Info.plist
                                                      version.plist
                                            Libraries/
                                                      libr2.dylib
                                                      libr3.dylib
                                            Headers/
                                                    libr1_header1.h
                                                    libr1_header2.h
                                                    libr1_header3.h
                                            Commands/
                                                    appl2
                                            bin/
                                                appl3
/usr/
    bin/
      appl1
      appl2 -> /Library/Frameworks/libr1.framework/Commands/appl2
      appl3 -> /Library/Frameworks/libr1.framework/Version/ver1/bin/appl3
    share/
        appl1-version/
                      appl1_aux1
                      appl1_aux2
</pre>

Latest revision as of 15:40, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.