在 CMake 中,get_filename_component 函数用于获取文件名或目录的各个部分,如文件名、扩展名、目录等。这对于处理文件路径并从中提取信息非常有用。
基本语法
get_filename_component(<variable> <filename> <component>)
- variable: 存储获取到的组件值的变量名。
- filename: 要获取组件的文件名或路径。
- component: 指定要获取的组件类型,可以是以下之一:
- NAME: 文件名部分。
- EXT: 扩展名部分。
- DIR: 目录部分。
- ABSOLUTE: 绝对路径。
- REALPATH: 解析后的真实路径。
- PATH: 路径,不包括文件名。
- FILENAME: 不带路径的文件名和扩展名。
- NAME_WE: 不带路径和扩展名的文件名。
示例
以下是几个示例演示如何使用 get_filename_component 函数:
1. 获取文件名和目录
cmake_minimum_required(VERSION 3.10)
project(GetFilenameComponentExample)
set(filepath "/path/to/myfile.txt")
get_filename_component(filename ${filepath} NAME)
get_filename_component(directory ${filepath} DIRECTORY)
message(STATUS "File Name: ${filename}")
message(STATUS "Directory: ${directory}")
在这个示例中,我们有一个文件路径 “/path/to/myfile.txt”,使用 get_filename_component 函数分别获取文件名和目录部分,并将结果存储在变量 filename 和 directory 中。输出将显示:
File Name: myfile.txt
Directory: /path/to
2. 获取文件的扩展名
cmake_minimum_required(VERSION 3.10)
project(GetFilenameComponentExtensionExample)
set(filepath "/path/to/myfile.txt")
get_filename_component(extension ${filepath} EXT)
message(STATUS "Extension: ${extension}")
在这个示例中,我们使用 get_filename_component 获取文件路径 “/path/to/myfile.txt” 的扩展名,并将其存储在 extension 变量中。输出将显示:
Extension: .txt
3. 获取文件的真实路径
cmake_minimum_required(VERSION 3.10)
project(GetRealPathExample)
set(link "/path/to/symlink")
set(filepath "${link}/myfile.txt")
get_filename_component(realpath ${filepath} REALPATH)
message(STATUS "Real Path: ${realpath}")
在这个示例中,我们假设 “/path/to/symlink” 是一个符号链接,然后使用 get_filename_component 函数获取 “/path/to/symlink/myfile.txt” 的真实路径,并将结果存储在 realpath 变量中。输出将显示符号链接解析后的真实路径。
注意事项
- 路径分隔符: 在不同操作系统上,路径分隔符可能不同(例如在 Windows 上是 \,在类 Unix 系统上是 /)。CMake 会自动处理这些差异。
- 路径解析: 使用 REALPATH 可以解析符号链接并获取真实路径,这在某些情况下非常有用。
结论
get_filename_component 函数是 CMake 中用于处理文件路径的强大工具,可以轻松获取路径的各个部分,如文件名、目录、扩展名等。这对于配置和构建过程中需要操作文件的场景非常有帮助。