在 CMake 中,get_filename_component
是一个非常有用的命令,用于从一个文件路径中提取不同的组成部分。它的语法如下:
get_filename_component(<var> <FileName> <mode> [CACHE])
-
<var>
: 用于存储结果的变量名。 -
<FileName>
: 要处理的文件路径。 -
<mode>
: 你想提取的文件路径的组成部分,可以是以下之一:NAME
: 文件的基本名称(去掉路径部分)。NAME_WE
: 文件的基本名称,但去掉文件扩展名。EXT
: 文件扩展名。DIR
: 文件的路径,不包含文件名。REALPATH
: 文件的绝对路径。ABSOLUTE
: 文件的绝对路径(如果文件是相对路径的话)。ROOT
: 提取路径的根目录(通常是根文件夹)。
-
[CACHE]
: 这是一个可选的参数,用来指定将结果缓存到 CMake 的缓存中。
示例
示例 1: 获取文件的基本名称
get_filename_component(FILENAME "/path/to/myfile.txt" NAME)
# FILENAME 将会是 "myfile.txt"
示例 2: 获取文件名(去掉扩展名)
get_filename_component(FILENAME_WE "/path/to/myfile.txt" NAME_WE)
# FILENAME_WE 将会是 "myfile"
示例 3: 获取文件扩展名
get_filename_component(FILEEXT "/path/to/myfile.txt" EXT)
# FILEEXT 将会是 ".txt"
示例 4: 获取文件的路径(不包含文件名)
get_filename_component(DIR "/path/to/myfile.txt" DIR)
# DIR 将会是 "/path/to"
示例 5: 获取绝对路径
get_filename_component(ABSOLUTE_PATH "./myfile.txt" ABSOLUTE)
# 如果当前工作目录是 "/home/user/project",ABSOLUTE_PATH 将会是 "/home/user/project/myfile.txt"
示例 6: 获取文件的真实路径(解决符号链接)
get_filename_component(REALPATH "/path/to/myfile.txt" REALPATH)
# REALPATH 将会是 "/real/path/to/myfile.txt",如果 "myfile.txt" 是符号链接的话,返回实际文件的路径
示例 7: 获取根目录
get_filename_component(ROOT "/path/to/myfile.txt" ROOT)
# ROOT 将会是 "/"
示例 8: 使用 CACHE 将结果缓存
get_filename_component(MY_DIR "/path/to/myfile.txt" DIR CACHE)
# MY_DIR 将会是 "/path/to",并且会被缓存到 CMake 的缓存中
这个命令非常适用于处理文件路径,尤其是在 CMake 脚本中,你需要操作路径或提取路径的一部分时。