CMake备忘单

file

file 命令用于执行各种文件和目录操作,例如创建目录、复制文件、读取文件内容等。它的功能非常强大,支持多种操作模式。

file常见用法

  1. 创建目录

    1
    file(MAKE_DIRECTORY path1 path2 ...)
    • 创建一个或多个目录。如果目录已存在,则不会报错。
  2. 复制文件

    1
    file(COPY file1 file2 ... DESTINATION directory)
    • 将文件从源路径复制到目标目录。
  3. 写入文件

    1
    file(WRITE file "message to write")
    • 将内容写入文件。如果文件已存在,则会覆盖原有内容。
  4. 追加内容到文件

    1
    file(APPEND file "message to append")
    • 将内容追加到文件末尾。
  5. 读取文件内容

    1
    file(READ file variable)
    • 将文件内容读取到变量中。
  6. 删除文件或目录

    1
    2
    file(REMOVE file1 file2 ...)
    file(REMOVE_RECURSE directory1 directory2 ...)
    • 删除文件或目录。REMOVE_RECURSE 可以递归删除目录及其内容。
  7. 获取文件列表

    1
    file(GLOB variable [RELATIVE path] [globbing expressions])
    • 获取匹配特定模式的文件列表。RELATIVE 参数可以指定相对路径。

file示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建目录
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/output)

# 复制文件
file(COPY ${CMAKE_SOURCE_DIR}/input.txt DESTINATION ${CMAKE_BINARY_DIR}/output)

# 写入文件
file(WRITE ${CMAKE_BINARY_DIR}/output/message.txt "Hello, World!")

# 追加内容到文件
file(APPEND ${CMAKE_BINARY_DIR}/output/message.txt "\nThis is an appended line.")

# 读取文件内容
file(READ ${CMAKE_BINARY_DIR}/output/message.txt CONTENT)
message(STATUS "File content: ${CONTENT}")

# 删除文件
file(REMOVE ${CMAKE_BINARY_DIR}/output/message.txt)

# 获取文件列表
file(GLOB INPUT_FILES RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/*.txt)
message(STATUS "Input files: ${INPUT_FILES}")

configure_file

configure_file 命令用于将文件从源路径复制到目标路径,并可以选择性地对文件内容进行变量替换。它常用于生成配置文件或复制资源文件。

configure_file常见用法

  1. 简单复制文件

    1
    configure_file(source destination COPYONLY)
    • 将源文件直接复制到目标路径,不进行任何处理。
  2. 变量替换

    1
    configure_file(source destination)
    • 将源文件复制到目标路径,并对文件中的变量进行替换。变量格式为 ${VARIABLE_NAME}
  3. 指定文件权限

    1
    configure_file(source destination [NEWLINE_STYLE style] [PERMISSIONS permissions...])
    • 可以指定文件的换行风格(如 UNIXWIN32)和权限。

configure_file示例

假设你有一个配置文件 config.in,内容如下:

1
2
# config.in
The value of MY_VARIABLE is ${MY_VARIABLE}.

CMakeLists.txt 中,你可以这样使用 configure_file

1
2
3
4
5
6
7
8
# 设置变量
set(MY_VARIABLE "Hello, CMake!")

# 配置文件
configure_file(${CMAKE_SOURCE_DIR}/config.in ${CMAKE_BINARY_DIR}/config.txt)

# 查看生成的文件
message(STATUS "Config file generated at ${CMAKE_BINARY_DIR}/config.txt")

生成的 config.txt 文件内容将是:

1
The value of MY_VARIABLE is Hello, CMake!.