[CMake] Project dependencies
Benjamin Eikel
cmake at eikel.org
Mon Apr 19 05:31:15 EDT 2010
Hello Alexander,
Am Sonntag, 18. April 2010 10:52:17 schrieb Alexander Neundorf:
> Hi Benjamin,
>
> On Friday 16 April 2010, Benjamin Eikel wrote:
> > Hello,
> >
> > maybe my first post was not clear enough.
> > I created a minimal example to demonstrate what I mean (see attached
> > files). That example contains a library called MyLib and a binary called
> > MyBin. The enclosed shell script can be used to build the binary on
> > Linux. At first the library will be configured such that the file
> > "MyLibConfig.cmake" will be created. After that the binary will be
> > configured and a build will be started. The build will fail because the
> > library was intentionally not build before. After that another way of
> > including the library is used. The second "CMakeLists.txt" file uses
> > add_subdirectory to reference the library.
>
> Yes, that's the normal way to do it.
>
> > When issuing a make command now,
> > the library will be built automatically. My question is if it is possible
> > to achieve this behavior when using the approach mentioned first. This
> > would make things easier in our projects when there are multiple
> > dependencies to different libraries which will be changed often and a
> > build of the binary should be triggered automatically.
>
> The normal and recommended way to to add all that (via add_subdirectory)
> into one CMake project. What is speaking against this in your case ?
>
> If you really want to have it separated, you may try how far you can get
> with externalproject_add(), but I would assume that the straightforward
> approach (add_subdirectory) will work much better.
I think you are right.
But I still want to build the libraries on their own (because they are used in
some Hudson builds to check if the build works correctly). Therefore a library
libA depending on another library libB calls find_package(libB) to find the
needed files.
When using the add_subdirectory() approach I currently have the problem that
the find modules do not find the library libB (because it has not been build
yet). Is it the right way to integrate a check for the target libB like the
following into FindlibB.cmake?
if(TARGET libB)
set(libB_LIBRARY Geometry)
else()
find_library(libB_LIBRARY
NAMES libB
HINTS ${libB_PKGCONF_LIBRARY_DIRS} [...]
PATH_SUFFIXES lib64 lib [...]
)
endif()
This seems to work if I call add_subdirectory() in the correct order in the
top-level project.
Kind regards,
Benjamin
More information about the CMake
mailing list