[CMake] Find_package: general question

Vincent Garcia vincent.garcia at inria.fr
Fri Jan 21 08:59:17 EST 2011


Dear CMake users, 

I have this BIG project which has tons of subdirectories (many levels). 
In each (final) subdirectory, I create targets (executables and libraires). 
So I have my top level CMakeLists.txt and one CMakeLists.txt file (which is also a project) in each subdirectory. 
Everything compiles just fine! 

My question is a general CMake question and is the following: 
Imagine I can use ITK in my project. To do that, in the top level CMakeLists.txt I define a variable USE_ITK. 
If ITK is used, I search for it and I include useful files: 

OPTION(USE_ITK "If ON, search for Insight Toolkit package" OFF) 
IF(USE_ITK) 
FIND_PACKAGE(ITK) 
IF(ITK_FOUND) 
INCLUDE(${ITK_USE_FILE}) 
ELSE(ITK_FOUND) 
MESSAGE(FATAL_ERROR "ITK not found. Please set ITK_DIR.") 
ENDIF(ITK_FOUND) 
ELSE(USE_ITK) 
SET(ITK_FOUND OFF) 
ENDIF(USE_ITK) 

Now, if one subdirectory's project uses ITK, I have the following code (in the subdir's CMakeLists.txt): 

FIND_PACKAGE( ITK ) 
IF( NOT ITK_FOUND ) 
MESSAGE( "Project ${PROJECT_NAME} requires ITK and ITK was not found. ${PROJECT_NAME} will not be built." ) 
RETURN() 
ENDIF() 
INCLUDE( ${ITK_USE_FILE} ) 


As you can see, find_package(ITK) and INCLUDE( ${ITK_USE_FILE} ) are at least called twice (in fact much more). 
Is there any performance issue the method describe above? 
Since it's not my code and since i'm a CMake newbee, I'd like to understand if this is normal. 
I would say that this should be done once in the top level CMakeLists.txt. 
In the subdirs' CMakeLists, we should use only ITK_FOUND to decide if we build the target or not. 
Some people of my team agree and some don't. 
What is the best way to proceed? 

Many thanks! 

Vincent 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110121/e7be0433/attachment.htm>


More information about the CMake mailing list