文本文件中的 grep 字符串,并将它们复制到 CMake 中的目录中

grep strings from a text file and copy them to a directory in CMake

本文关键字:复制 CMake grep 文件 字符串 文本      更新时间:2023-10-16

在CMake 2.8.12中,如何从文本文件中grep字符串(每个字符串代表一个文件名(并将它们复制到目录中?

例如,我有一个文本文件 xx/yy/a.txt其中包含:

xx xx xx abc="some_file_name1.txt" xx xx xx
xx xx xx abc="some_file_name2.txt" xx xx xx
xx xx xx abc="some_file_name3.txt" xx xx xx

其中"xx"可能是一些随机字符串。

我需要首先提取some_file_name1.txt, some_file_name2.txt and some_file_name3.txt,通过将路径前缀xx/yy/附加到每个提取的字符串来为每个文件形成正确的路径,然后将每个文件复制到目录mydir/

我知道如何在 bash 脚本中执行此操作,但不知道如何在 CMake 中执行此操作,特别是,我需要在构建后目标的ADD_CUSTOM_COMMAND内执行此操作。

谢谢!

你可以有一个通过自定义命令调用的 CMake 脚本。像这样:

# ProcessFile.cmake:
file(READ "${ProcessFile_INPUT_PATH}" ProcessFile_CONTENT)
# Replace newlines with semicolon so that it is treated as a list by CMake
# Will need to escape existing semicolons beforehand if file contains any.
string(REPLACE "n" ";" ProcessFile_LINES "${ProcessFile_CONTENT}")
foreach(_line ${ProcessFile_LINES})
  string(REGEX REPLACE "^.+abc="(.+)".+$" "xx/yy/\1" _file_path "${_line}")
  file(COPY "${_file_path}" DESTINATION "${ProcessFile_OUTPUT_DIR}")
endforeach()
# CMakeLists.txt:
add_custom_command(OUTPUT "output-file"
  COMMAND "${CMAKE_ROOT}" -DProcessFile_INPUT_PATH="xx/yy/a.txt" -DProcessFile_OUTPUT_DIR="mydir" -P ProcessFile.cmake)

我没有测试脚本,但这是要点:

  • ProcessFile.cmake解析文件,迭代每一行,提取文件名并复制文件。
  • CMakeLists.txt中的add_custom_command()调用ProcessFile.cmake脚本,为其提供输入文件和输出目录的位置。