[CMake] Handling library dependencies and minimizing duplicated include_directories

Michael Wild themiwi at gmail.com
Sat Mar 20 10:34:14 EDT 2010


On 20. Mar, 2010, at 14:15 , Daniel Lidström wrote:

> Hi Mike, 
> 
>> Most of us would write a "FindGFL.cmake" file which will locate the
>> GFL library and set GFL_INCLUDE_DIRS, GFL_LIBRARIES, and other
>> standard directories/files like that. Some of these files will do the
>> "include(${GFL_INCLUDE_DIRS}" for you and some will not.
>>   Some design those (like FindQt4.cmake) with an additional
>> "UseQt4.cmake" which you simply do an "include(${USE_QT4_FILE})". So
>> in your case, if you have a large project with lots of project
>> dependent on a few of your libraries I would write a "FindGFL.cmake"
>> that does the "include()" for you. Then your cmake files look
>> something like this.
>> 
>> 
>> set (CMAKE_MODULE_PATH "Path/To/Your/Find*.cmake/Dir" 
>> ${CMAKE_MODULE_PATH} )
>> Find_package(GFL)
>> 
>> add_library(somelib ${srcs})
>> target_link_libraries (somelib ${GFL_LIBRARIES} )
>> 
>> This is much more scalable. Does that help?
> 
> This would definitely help me. I am wondering one thing though. Do you
> place all your FindXXX.cmake in the same folder? If I understand you
> correctly it would like something like this:
> 
> UMC3D/
> CMakeLists.txt
> GFL/
>  CMakeLists.txt
> Device/
>  CMakeLists.txt
> Test/
>  CMakeLists.txt
> 
> Then I need to create a CMake folder like so:
> 
> UMC3D/
> CMake/
>  FindGFL.cmake
>  FindDevice.cmake
>  .
>  .
>  .
> 
> A difference that I can see with this compared to Boost.Build is that the
> configuration of GFL (build and usage) is separated (GFL/CMakeLists.txt + CMake/FindGFL.cmake).
> Is this how you deal with this? Maybe it is not a big problem.
> 
> Regards,
> 
> Daniel Lidström
> Stockholm, Sweden 

If the projects UMC3D, GFL etc can be used independently, but are all "under your control", then you shouldn't write FindUMC3D.cmake, FindGFL.cmake etc files, but create UMC3D-config.cmake, GFL-config.cmake etc files instead. Read the documentation of the FIND_PACKAGE command, especially the paragraphs about the "config mode". You'll also find many discussions on this in the archives of this list.


Michael



More information about the CMake mailing list