2016-03-01 73 views
0

我想用cmake中的一个变量MY_VARIABLE填充包含Makefile的所有/ foo子目录的列表。问题是,所有/ foo子目录的深度都与我的CMakeLists所处的深度不同,并且我不希望任何不包含Makefile的子目录。我也只是想要目录的名称。创建只保存某些子目录的cmake变量

例如,如果$(BUILD_DIR)/ A/B /富/包含在生成文件:

$(BUILD_DIR)/ A/B /富/将是很好

$(BUILD_DIR)/ A/B /富/ Makefile文件会很糟糕

摆弄周围,我知道我可以做这样的事情与UNIX Shell:

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}") 

参考