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 

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to