[CMake] Read multiple path names from filesystem
Tim Just
tim.just at rwth-aachen.de
Thu Oct 29 10:11:46 EDT 2009
Michael Wild wrote:
>
> On 29. Oct, 2009, at 11:11 , Tim Just wrote:
>
>> Hi,
>>
>> I'm using CMake 2.8 rc3 on Ubuntu to build a modular and extensible
>> project. Therefore I have a directory called 'modules' beneath the
>> project root. In this folder may be an undefined number of subfolders
>> containing module sources and CMakeLists.txt files. In the
>> CMakeLists.txt in project root, I try to find out which modules exist
>> in the modules folder. To do so I'm using find_path:
>>
>> find_path(MODULE_PATH CMakeLists.txt PATHS modules/* NO_DEFAULT_PATH)
>> get_filename_component(MODULE_NAME ${MODULE_PATH} NAME)
>>
>> This works for ONE module, but I want to find ALL modules in the
>> directory. The number of modules is not known in advance.
>>
>> Has anyone suggestions how to realize this functionality?
>>
>> Thanks for your help,
>>
>> Tim
>>
>
> You should be using something like
>
> FILE(GLOB MODULES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
> "${CMAKE_CURRENT_SOURCE_DIR}/modules/*")
> FOREACH(module ${MODULE_PATHS})
> IF(IS_DIRECTORY "${module}")
> ADD_SUBDIRECTORY("${module}")
> ENDIF()
> ENDFOREACH()
>
>
> HTH
>
> Michael
Hi Michael,
thanks for your fast reply and the code.
Finally I'm using this function:
---
function(find_all_modules)
file(GLOB MODULE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/modules/*")
foreach(M ${MODULE_PATHS})
if(IS_DIRECTORY "${M}")
get_filename_component(MODULE_NAME "${M}" NAME)
list(APPEND MODULES_ALL ${MODULE_NAME})
message("Found module: ${MODULE_NAME}")
endif()
endforeach()
endfunction(find_all_modules)
---
Best regards,
Tim
More information about the CMake
mailing list