cmake get_filename_component 详解

在 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 中用于处理文件路径的强大工具,可以轻松获取路径的各个部分,如文件名、目录、扩展名等。这对于配置和构建过程中需要操作文件的场景非常有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值