[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