<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: Times New Roman; font-size: 12pt; color: #000000'>Dear CMake users,<br><br>I have this BIG project which has tons of subdirectories (many levels).<br>In each (final) subdirectory, I create targets (executables and libraires).<br>So I have my top level CMakeLists.txt and one CMakeLists.txt file (which is also a project) in each subdirectory.<br>Everything compiles just fine!<br><br>My question is a general CMake question and is the following:<br>Imagine I can use ITK in my project. To do that, in the top level CMakeLists.txt I define a variable USE_ITK.<br>If ITK is used, I search for it and I include useful files:<br><br>OPTION(USE_ITK "If ON, search for Insight Toolkit package" OFF)<br>IF(USE_ITK)<br>&nbsp; FIND_PACKAGE(ITK)<br>&nbsp; IF(ITK_FOUND)<br>&nbsp;&nbsp;&nbsp; INCLUDE(${ITK_USE_FILE})<br>&nbsp; ELSE(ITK_FOUND)<br>&nbsp;&nbsp;&nbsp; MESSAGE(FATAL_ERROR "ITK not found. Please set ITK_DIR.")<br>&nbsp; ENDIF(ITK_FOUND)<br>ELSE(USE_ITK)<br>&nbsp; SET(ITK_FOUND OFF)<br>ENDIF(USE_ITK)<br><br>Now, if one subdirectory's project uses ITK, I have the following code (in the subdir's CMakeLists.txt):<br><br>FIND_PACKAGE( ITK )<br>IF( NOT ITK_FOUND )<br>&nbsp;&nbsp;&nbsp; MESSAGE( "Project ${PROJECT_NAME} requires ITK and ITK was not found. ${PROJECT_NAME} will not be built." )<br>&nbsp;&nbsp;&nbsp; RETURN()<br>ENDIF()<br>INCLUDE( ${ITK_USE_FILE} )<br><br><br>As you can see, find_package(ITK) and INCLUDE( ${ITK_USE_FILE} ) are at least called twice (in fact much more).<br>
Is there any performance issue the method describe above?<br>Since it's not my code and since i'm a CMake newbee, I'd like to understand if this is normal.<br>I would say that this should be done once in the top level CMakeLists.txt.<br>In the subdirs' CMakeLists, we should use only ITK_FOUND to decide if we build the target or not.<br>Some people of my team agree and some don't.<br>What is the best way to proceed?<br><br>Many thanks!<br><br>Vincent<br><br></div></body></html>