[CMake] Read multiple path names from filesystem
Michael Wild
themiwi at gmail.com
Thu Oct 29 10:17:06 EDT 2009
On 29. Oct, 2009, at 15:11 , Tim Just wrote:
> 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
Looks good to me. You might want to use the STATUS flag in your
MESSAGE call though. No flag implies a warning and gets special
treatment by ccmake and cmake-gui.
Michael
More information about the CMake
mailing list