问题描述
下面是CMakeLists.txt文件,该文件尝试使用通配符*.txt
执行终端命令。当前它给出错误ls: cannot access '*.txt': No such file or directory
。但是,当我尝试不使用通配符运行时,它会按预期运行,即它将列出当前目录中的文件。
我可以在execute_process中使用通配符吗?
cmake_minimum_required(VERSION 3.8)
project(foo)
execute_process(COMMAND ls *.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE result
OUTPUT_VARIABLE curr_out
ERROR_VARIABLE curr_out
)
message(STATUS "${result} : ${curr_out}")
解决方法
首先,您应该了解filename expansion由shell完成的扩展之一,在命令执行前,它们使*.txt
扩展到列表使用特殊规则的文件。
知道了这些之后,您自然就会知道必须运行外壳程序才能使*.txt
扩展。
COMMAND sh -c "ls *.txt"
使用file(GLOB tmp "*.txt")
并传递tmp
会更加虚假。