[CMake] Recommandation for macOS framework install rules

Lucas Soltic lucas.soltic at orange.fr
Mon Jan 22 13:27:07 EST 2018


Hello,

The product is a cross-platform API that relies on CMake for the config part. We ship static and dynamic libraries for Linux, Windows and macOS. Additionally on macOS we want to provide frameworks to ease integration (headers and a few dependencies in the bundle framework, etc). In addition to the libraries, with also ship documentation, sample codes, etc.

When we ship we do a manual packaging of the files for now. We also have install rules if a user executes the install target from his own build of the product.

And by default as CMake also installs frameworks relatively to CMAKE_INSTALL_PREFIX, they get installed in /usr/local or one of its subdirectories. This might be ok for all the other files to install but not for frameworks, as documented on https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/InstallingFrameworks.html <https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/InstallingFrameworks.html>

Also I don't want to specify an absolute path in the install rule of the frameworks, because we generate a <Project>Config.cmake file and giving an absolute path to install() command makes the generated config non-relocatable. It doesn't look to be documented in https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#creating-relocatable-packages <https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#creating-relocatable-packages> but that's what I noticed.

Finally as we don't ship a .app bundle, we can't install our stuff in it. I hope it's clearer, please tell me if you still miss information.

Best regards,
Lucas

> Le 22 janv. 2018 à 17:33, Sean McBride <sean at rogue-research.com> a écrit :
> 
> On macOS, the most usual thing is for your code to be self-contained in your .app bundle.  Perhaps if you described more what kind of thing you are building and why you don't want to do the usual thing, people will have more advice...
> 
> 
> On Fri, 19 Jan 2018 19:44:03 +0100, Lucas Soltic said:
> 
>> Hello,
>> Should I conclude that there are no recommendations?
>> 
>> Best regards,
>> Lucas
>> 
>>> Le 17 janv. 2018 à 23:49, Lucas Soltic <lucas.soltic at orange.fr> a écrit :
>>> 
>>> Hello,
>>> 
>>> By default library install() command uses CMAKE_INSTALL_PREFIX (/usr/
>> local by default) as a base for relative install paths. But when you
>> define install rules for macOS frameworks, it doesn't make much sense to
>> install them there. I'd rather expect something like /Library/Frameworks.
>>> 
>>> On the other side, if you have more things to install like a "readme"
>> or documentation that should go into /usr/local/share, it doesn't make
>> sense to have them installed in /Library/Frameworks. So you can't just
>> change CMAKE_INSTALL_PREFIX to be /Library/Frameworks.
>>> 
>>> What do you recommend to keep installation rules simple (ie. remain
>> relative) and yet support installation of both frameworks and other things?
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180122/35ef77f3/attachment.html>


More information about the CMake mailing list