gpt4 book ai didi

cmake - 通过 CMake 去除文件名(最短)扩展名(获取文件名,删除最后一个扩展名)

转载 作者:行者123 更新时间:2023-12-04 01:41:48 28 4
gpt4 key购买 nike

get_filename_component可用于删除/提取最长的扩展名。

EXT = File name longest extension (.b.c from d/a.b.c)

NAME_WE = File name without directory or longest extension



我有一个文件名中有一个点,所以我需要最短的扩展名:
set(MYFILE "a.b.c.d")
get_filename_component(MYFILE_WITHOUT_EXT ${MYFILE} NAME_WE)
message(STATUS "${MYFILE_WITHOUT_EXT}")

报告
-- a

但我想要
-- a.b.c

查找没有最短扩展名的文件名的首选方法是什么?

最佳答案

我会做:

string(REGEX REPLACE "\\.[^.]*$" "" MYFILE_WITHOUT_EXT ${MYFILE})

正则表达式匹配一个点( \\. ,见下一段),后跟任意数量的非点的字符 [^.]*直到字符串结束( $ ),然后将其替换为空字符串 "" .

元字符点(通常在正则表达式中表示“匹配任何字符”)需要用 \ 转义被解释为文字点。但是,在 CMake 字符串文字(如 C 字符串文字)中, \是一个特殊字符和 need to be escaped as well (另见 here )。因此你得到奇怪的序列 \\. .

请注意(几乎所有) metacharacters do not need to be escaped within a Character Class :因此我们有 [^.]而不是 [^\\.] .

最后,请注意,如果分析的文件名中没有点,则此表达式也是安全的(在这种情况下,输出对应于输入字符串)。

链接到 string command documentation .

关于cmake - 通过 CMake 去除文件名(最短)扩展名(获取文件名,删除最后一个扩展名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049180/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com