[CMake] find_package config and install

Lars laasunde at hotmail.com
Wed Jan 23 02:30:35 EST 2019


Alan,

Appreciate you taking the time to help.

It is unfortunately not an option to move 'foo' package to CMake at this time.

To summarize, we want to perform find_package in config mode to a none-CMake package that contain a target and some config files. Our current solution is to manually create the foo-config.cmake file that creates an imported target and sets properties on target. The 'foo' package must work with CPack in order to include the necessary files in MSI and RPM. As an experiment we added two install(..) commands to the foo-config.cmake file and this does include both 'foo' target and configuration files in the installers. However we are not sure if this is good modern CMake solution. This solution means that find_package(..) will automatically install files to the build tree which is slightly more functionality than the command name indicates.

Any comments are welcome 😊

kind regards, Lars

________________________________
Fra: Alan W. Irwin <Alan.W.Irwin1234 at gmail.com>
Sendt: onsdag 23. januar 2019 04.14
Til: Lars
Kopi: cmake at cmake.org
Emne: Re: Sv: [CMake] find_package config and install

Hi Lars:

On 2019-01-22 12:05-0000 Lars wrote:

> Alan,
>
>
> Thank you very much for the response.

You are welcome.

> Our 'foo' package does not use CMake. That means there is no build-system to produce the foo-config.cmake file, the file is manually created.  The file does allow different projects to import the target from 'foo' package that has been installed. However, we need to include the library and config file in CPack installer and who is responsible for that task?
>
>
> We are using Qt5 config mode to import targets like you describe in development context and it works. However, to setup packaging system (CPack) we need to perform the Install(..) command so
> that the necessary Qt5 targets are included in the installer (MSI and RPM). We cannot require the customer to install a 2GB Qt5 installer for a few libraries. In that context it is unclear who\when\how should perform the installation.

As you are probably already aware, the Qt5 software produces their "*-config.cmake" in a non-CMake way.
And it appears you are attempting to follow that method for your own
"foo" package case.  I applaud that attempt since that end result
should make life much easier for users of your foo package that do use
CMake.  However, now I hear you are using CPack for foo as well.  So
maybe it is time to bite the bullet and move foo to a cmake build
(which should make your life much simpler for creating both a working
"foo-config.cmake" file and a working CPack configuration.)

I specifically used the term "bite the bullet" because changing build
systems for any large software project with many different executables
and libraries is obviously not a trivial task.  But I assure you the
end goal of having a complete CMake-based build, test, and CPack
system is worth the pain of the transition.  But I would also advise
you it is possible to get from your present state to that goal in
small manageable steps that are not painful at all because partially
implemented CMake-based build systems normally happily coexist with
other build systems.

To take an example of such a soft (and completely unplanned)
transition to CMake (from more than a decade ago now) in the PLplot
case we had a mature autotools-based build system that was mostly good
enough "except for a few nagging problems...."  So out of curiosity
more than anything else I started a hobby project of implementing the
build of just one of our smaller libraries with CMake.  And that
proved to be trivial (it only took a half an hour or so to learn what
I needed about CMake starting from zero knowledge), and the resulting
library built much faster.  Following up on that initial promising
result I quickly (with some substantial help from other PLplot
developers at the time who were interested in learning about CMake)
extended that hobby build system to more and more of our libraries and
executables.  Until within a month or so of me starting this "hobby"
this self-organized group of
developers for our CMake-based build system was producing the same
libraries, shared-objects, and executables as our "standard"
autotools-based build system.  But that configuration was much easier
to understand than for our standard build system, and both the
configuration and build was much faster than for the autotools case.

As a result we "got serious" and for the next month or so extended the
work to support both PLplot testing and the installed version of
PLplot to essentially complete the project.  For a year after
that we maintained both the CMake-based and autotools-based build
systems, but interest in the latter dropped so fast that at
the end of that year we completely removed all traces of
our autotools-based build system from our source tree, and we
never regretted that decision.

Note, this transition to a CMake-based build system would likely not
have ever happened if we attempted to plan it from the start.
Instead, treating it like a learning hobby motivated me and the rest
of our development group a lot, and we achieved a very fast and
non-painful transition as a result.

Of course, you may reply that the "foo" case is completely different
and you are completely happy with your present build system for that
software.  If so, that is fine.  However, if you have some nagging
doubts about that build system (for example, some inconveniences when
implementing the "foo-config.cmake" file, configuring CPack, or
ultimately (if you are interested in testing "foo" configuring CTest)
then perhaps it is time for you to start a possible soft transition to
a CMake-based build system for "foo" as a hobby style of project
without the type of "planning" that often kills such potentially
useful projects dead.

Alan
__________________________
Alan W. Irwin

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190123/16028bca/attachment-0001.html>


More information about the CMake mailing list