[CMake] overriding CMAKE_MODULE_PATH list

Michael Wild themiwi at gmail.com
Mon Feb 22 04:50:51 EST 2010


On 21. Feb, 2010, at 18:53 , Luigi Calori wrote:

> Alexander Neundorf wrote:
>> On Friday 19 February 2010, Luigi Calori wrote:
>>  
>>> I would like to have some clarification about module and include
>>> effective search order:
>>> 
>>> I am in the following situation:
>>> 
>>> I use (configure) a project that is overriding some CMake standard Find
>>> modules by doing in his main CMakeLists.txt file:
>>> 
>>> SET(CMAKE_MODULE_PATH "<ProjectModuleFolder>;${CMAKE_MODULE_PATH}")
>>> 
>>> I would like to being able to override, at configure time the project
>>> modules with mine.
>>>    
>> 
>> Then the project may get some find-modules which behave differently than what it expects. Why do you want to do this ?
>>  
> I am currently working on building a higher level project that combines, using ExternalProjectAdd, the project (OpenSceneGraph) and some of its dependencies.
> As I am building deps, I would  like to change the way the projects find my deps, and so the need to instruct OSG to use my Find commands.
> This would also allow more flexible build customization without need to patch OSG.
> Currently OpenSceneGraph relies upon standard unix deps on Linux and probably OSX and use pre-built deps on Windows.
> This needs different deps be built depending on compiler version (VC7,VC8,VC9,VC10,Mingw, 32/64) as on windows, even the most common dep libs (zlib,png,jpeg,freetype,curl) are not available.
> I would also like to build static libs if possible
> 
>>> Doing:
>>> cmake -DCMAKE_MODULE_PATH:PATH=<myModuleFolder>
>>> does not work (my files are searched AFTER projects files)
>>>    
>> 
>> Yes, because the other project appends its apth to the already existing one, so your ends up at the end.
>> 
>>  
>>> Is it safe to just change project CMakeLists.txt to
>>> SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};<ProjectModuleFolder>")
>>> 
>>> Or, on older CMake version this could result in getting standard CMake
>>> modules found first?
>>>    
>> 
>> Everything in CMAKE_MODULE_PATH will be searched before cmake's own module directory.
>>  
> Thanks, so suggesting this change to the main project should not harm other builds, based on older CMake version?
> It just allows a grater configurability.
> 
> Thanks
> Luigi
> 

Instead of using custom FindXXX modules, you could use cache-initialization scripts (refer to the -C option of CMake) in the CMAKE_ARGS of ExternalProject_Add and set the relevant variables yourself such that the FindXXX modules don't have to do anything at all. Alternatively you can set the variables using -D flags if they are not too many.


Michael



More information about the CMake mailing list