创建仅包含某些子目录的cmake变量

时间:2016-03-01 19:03:32

标签: cmake

我想在cmake中填充变量MY_VARIABLE,其中包含包含Makefile的所有/ foo子目录的列表。问题是,所有/ foo子目录的深度都与我的CMakeLists所在的深度不同,并且我不希望任何子目录不包含Makefile。我也只想要目录的名称。

例如,如果$(BUILD_DIR)/ A / B / foo /包含一个makefile:

$(BUILD_DIR)/ A / B / foo /会很好

$(BUILD_DIR)/ A / B / foo / 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
               )

只能解决分析错误。

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分: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}")

<强>参考