文本文件中的 grep 字符串,并将它们复制到 CMake 中的目录中
grep strings from a text file and copy them to a directory in CMake
在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
脚本,为其提供输入文件和输出目录的位置。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- CMake-按正确顺序将项目与C运行时对象文件链接
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用CMake创建QML插件
- CMake将依赖项复制到可执行输出路径
- 如何使用cmake从主要的CMakeList.txt复制目标文件?
- CMake:将文件从构建目录复制到源直接
- CMake:如何根据配置和架构复制不同的文件来构建目录
- 文本文件中的 grep 字符串,并将它们复制到 CMake 中的目录中
- CMake FetchContent 不会复制库
- CMake:将头文件复制到输出目录
- 将资产目录从源复制到在CMAKE中构建目录
- CMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
- 如何在使用 CMake 制作后将目录的内容复制到构建目录中
- CMAKE:复制 Boost-Build 的"build everything in Jamfile"行为?
- CMake只在重新加载时复制文件,而不是在生成时复制
- 如何对CMake构建的不可复制SegFault进行故障排除
- 在Android上使用cmake时,将共享对象复制到jniLibs中