Skip to content

在CMake中,file() 函数是一个多功能命令,用于执行与文件相关的操作,例如读取、写入、复制、删除文件,以及操作文件系统路径等。它提供了许多子命令来处理不同的文件操作需求。

以下是 file() 函数的一些常用子命令及其用法:


1. 读取文件

  • READ: 读取文件内容并存储到变量中。
cmake
file(READ <filename> <variable> [OFFSET <offset>] [LIMIT <max-in>] [HEX])

示例:

cmake
file(READ "example.txt" content)
message("File content: ${content}")
  • STRINGS: 从文件中提取字符串并存储到变量中。
cmake
file(STRINGS <filename> <variable> [<options>...])

示例:

cmake
file(STRINGS "example.txt" lines)
foreach(line IN LISTS lines)
    message("Line: ${line}")
endforeach()

2. 写入文件

  • WRITE: 将内容写入文件(覆盖原有内容)。
cmake
file(WRITE <filename> <content>...)

示例:

cmake
file(WRITE "output.txt" "Hello, World!")
  • APPEND: 将内容追加到文件末尾。
cmake
file(APPEND <filename> <content>...)

示例:

cmake
file(APPEND "output.txt" "\nThis is a new line.")

3. 文件操作

  • COPY: 复制文件或目录。
cmake
file(COPY <files>... DESTINATION <dir> [FILE_PERMISSIONS <permissions>...] [DIRECTORY_PERMISSIONS <permissions>...])

示例:

cmake
file(COPY "source.txt" DESTINATION "destination/")
  • REMOVE: 删除文件或目录。
cmake
file(REMOVE [RECURSE] <files>...)

示例:

cmake
file(REMOVE "file_to_delete.txt")
  • RENAME: 重命名文件或目录。
cmake
file(RENAME <oldname> <newname>)

示例:

cmake
file(RENAME "old_name.txt" "new_name.txt")

4. 目录操作

  • GLOB: 使用通配符匹配文件列表。
cmake
file(GLOB <variable> [LIST_DIRECTORIES true|false] [RELATIVE <path>] [<globbing-expressions>...])

示例:

cmake
file(GLOB sources "src/*.cpp")
  • MAKE_DIRECTORY: 创建目录。
cmake
file(MAKE_DIRECTORY <directories>...)

示例:

cmake
file(MAKE_DIRECTORY "new_directory")
  • REMOVE_RECURSE: 递归删除目录及其内容。
cmake
file(REMOVE_RECURSE <files>...)

示例:

cmake
file(REMOVE_RECURSE "directory_to_delete")

5. 路径操作

  • RELATIVE_PATH: 计算相对路径。
cmake
file(RELATIVE_PATH <variable> <directory> <file>)

示例:

cmake
file(RELATIVE_PATH relative_path "/home/user" "/home/user/project/file.txt")
message("Relative path: ${relative_path}")
  • TO_CMAKE_PATH: 将系统路径转换为CMake路径格式。
cmake
file(TO_CMAKE_PATH "<path>" <variable>)
  • TO_NATIVE_PATH: 将CMake路径转换为系统路径格式。
cmake
file(TO_NATIVE_PATH "<path>" <variable>)

6. 文件校验

  • SHA256** / **MD5: 计算文件的哈希值。
cmake
file(<algorithm> <filename> <variable>)

示例:

cmake
file(SHA256 "example.txt" file_hash)
message("SHA256 hash: ${file_hash}")

7. 文件下载

  • DOWNLOAD: 从URL下载文件。
cmake
file(DOWNLOAD <url> <file> [<options>...])

示例:

cmake
file(DOWNLOAD "https://example.com/file.txt" "downloaded_file.txt")

总结

file() 函数是CMake中非常强大的工具,可以用于处理文件、目录和路径相关的各种操作。根据具体需求选择合适的子命令即可。如果需要更详细的信息,可以参考 CMake官方文档