[CMake] Fixup Bundle Problem when using multiple executables

Fabian Saccilotto f.saccilotto at gmx.ch
Wed Nov 13 10:59:17 EST 2013


Dear CMake Users,

we are using CMake as build system for an application which is made from 
several subapplications for ease of development (Windows 7 + Visual 
Studio 2010).

In order to make the setup of a project for the developer easier, we use 
the fixup_bundle macro from BundleUtilities via the INSTALL project.
It searches the libraries needed of an executable in given locations and 
copies them to the output folder.
If there are several executables to fixup in the same folder, errors 
occur while resolving the dependencies.

With CMake we are able to build a global meta-solution with all the 
subprojects in it, what allows the developer to have all the sources in 
one solution and run standalone subprojects and tests from there.
All Output is directed to the same location which is under the root 
application directory appended with the configuration name (Debug, 
Release etc).
(Note: The subprojects are also used in other applications)

Meta-Solution:
     - LibraryA
     - LibraryA_Standalone (Standalone and Library differ in symbols 
which are exported and target to build)
     - LibraryA_Test
     - LibraryB
     - LibraryB_Standalone
     - LibraryB_Test
     - Full_Application (Depends on LibraryA and LibraryB)
     - INSTALL (calls LibraryA's and LibraryB's install_cmake)

The information to fix up the executables resides in the subprojects 
which install the fixup script with the according executable and 
directories.

THE PROBLEM:
When building the install project for a subproject, the fixup_bundle 
macro searches for all other executables in the current directory and 
tries to fix them. Because not all paths are given with each subproject 
not all libraries can be resolved. see Line 420 of BundleUtilities.cmake

# But do fixups on all executables in the bundle:
#
get_bundle_all_executables("${bundle}" exes)

I temporarily fixed this using only the given executable here and 
ignoring others.

I would be interested in the following things:
     - why are other executables search for?
     - is there a better way to do what I want?

Thank you for your replies

Kind regards

Fabian Saccilotto


More information about the CMake mailing list