我想在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
)
只能解决分析错误。
任何帮助或建议都将不胜感激。
答案 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}")
<强>参考强>