[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