2016-03-01 4 views
0

Я хочу заполнить переменную MY_VARIABLE в cmake со списком всех подкаталогов/foo, содержащих Makefile. Проблема в том, что все подкаталоги/foo имеют разную глубину, где находятся мои CMakeLists, и я не хочу никаких подкаталогов, не содержащих Makefile. Я также просто хочу, чтобы имя каталога.Создание переменной cmake, которая содержит только определенные подкаталоги

Например, если $ (build_dir)/A/B/Foo/содержал Makefile:

$ (build_dir)/A/B/Foo/было бы хорошо

$ (build_dir)/A/B/Foo/Makefile будет плохо

Лужение вокруг, я знаю, что могу сделать что-то подобное с оболочкой UNIX:

find $(BUILD_DIR) -name 'Makefile' | grep 'foo/' | sed 's/\/Makefile//' 

Но я не знаю, как вызвать, что в CMake, или если есть другой способ. Я пробовал

execute_process(COMMAND find $(BUILD_DIR) -name 'Makefile' | grep 'foo/' | sed 's/\/Makefile\//' 
       OUTPUT_VARIABLE MY_VARIABLE 
       ) 

только для устранения ошибок синтаксического анализа.

Любая помощь или совет будут оценены.

+0

вы можете сделать [строка манипуляции в CMake тоже] (https://cmake.org/cmake/help/v 3.0/command/string.html), не нужно вызывать grep, sed или ничего извне – brunocodutra

ответ

0

Как @brunocodutra упоминалось, нет необходимости называть внешние find()/grep()/sed() команды:

cmake_minimum_required(VERSION 2.8) 

project(SearchFooMakefile CXX) 

file(
    GLOB_RECURSE _makefileDirs 
    RELATIVE  "${CMAKE_CURRENT_SOURCE_DIR}" 
    "Makefile" 
) 

foreach(_makefileDir IN LISTS _makefileDirs) 
    get_filename_component(_dir "${_makefileDir}" PATH) 
    get_filename_component(_last_dir "${_dir}" NAME) 
    if ("${_last_dir}" STREQUAL "foo") 
     list(APPEND MY_VARIABLE "${_dir}") 
    endif() 
endforeach() 

message("${MY_VARIABLE}") 

Ссылки

Смежные вопросы