如何使用通配符在cmake中运行execute_process?

问题描述

下面是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 expansionshell完成的扩展之一,在命令执行前,它们使*.txt扩展到列表使用特殊规则的文件。

知道了这些之后,您自然就会知道必须运行外壳程序才能使*.txt扩展。

COMMAND sh -c "ls *.txt"

使用file(GLOB tmp "*.txt")并传递tmp会更加虚假。