[CMake] I'm confused with Find*.cmake and *-config.cmake

Benoit Thomas benoit.thomas at gameloft.com
Mon Apr 19 16:07:43 EDT 2010


Hello,

I'm using an external library which is already compiled. I have wrapped 
the library in a MyLib.cmake and use it in cmake as an imported library. 
It works fine, but since the include line uses relative path, it changes 
from projects to projects and in some case it looks just wrong.

I want to change this to something more like:

find_package (MyLib)
include (MYLIB_CMAKE_FILE)
# add_executable and stuff
target_link_libraries (MyExe MyLib)

However, I'm not sure if I should create a FindMyLib.cmake file or 
MyLib-config.cmake. Both seems to eventually do the same, but I don't 
really understand what are the differences.

When I looked at some Find*.cmake file (FindSWIG for example) it has a 
UseSWIG.cmake file. Syntax looks like what I'm trying to achieve, but 
the none of the Use* files I've check create imported libray, so I guess 
this is not the way to go.

In the book, there is an example which seems to do more what I want and 
use *-config.cmake, which give something like

find_package (MyLib)
# no include, since the MyLib-config.cmake already took care of the include
# add_executable and stuff
target_link_libraries (MyExe MyLib)

Part of what I don't understand is when a user use the find_package 
command, is he expecting to load a Find* file or a *-config file (or he 
doesn't care?), and is he expecting a specific behavior from each file, 
etc, etc... And would it be a surprise for the user if the 
find_package(MyLib) add a MyLib target into his project ? And is using 
find_package appropriate for this kind of situation and I got it all 
wrong :) ?

Bottom line, I'm looking for a way to write my projects so that if 
someone else with cmake experience look into them, it will feel like 
"common" cmake project (if such thing exists) and not something I'm the 
only one to understand...

(Sorry if this sound confusing)
Ben.



More information about the CMake mailing list