|
|
(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>
| |