2016-03-01 25 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}") 

參考