[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