Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake-如何获取目录名中的倒数第二个?_Cmake - Fatal编程技术网

CMake-如何获取目录名中的倒数第二个?

CMake-如何获取目录名中的倒数第二个?,cmake,Cmake,因此,我: get_filename_component(a_dir ${some_file} PATH) get_filename_component(a_last_dir ${a_dir} NAME) 其中,最后一个目录应返回我的目录的最低级别,而最后一个目录应返回我的完整目录 无论如何,我可以让第二个最后一个目录成为可能??要返回完整目录的第二个较低级别?将我的评论转换为答案 您可以通过附加。/…来使用 我理解您当前的解决方案是这样的: cmake_minimum_required(VE

因此,我:

get_filename_component(a_dir ${some_file} PATH)
get_filename_component(a_last_dir ${a_dir} NAME)
其中,最后一个目录应返回我的目录的最低级别,而最后一个目录应返回我的完整目录

无论如何,我可以让第二个最后一个目录成为可能??要返回完整目录的第二个较低级别?

将我的评论转换为答案

您可以通过附加
。/…
来使用

我理解您当前的解决方案是这样的:

cmake_minimum_required(VERSION 2.8)

project(SecondLastDirName)

set(some_file "some/dir/sub/some_file.h")

get_filename_component(a_dir "${some_file}" PATH)
get_filename_component(a_last_dir "${a_dir}" NAME)

get_filename_component(a_second_dir "${a_dir}" PATH)
get_filename_component(a_second_last_dir "${a_second_dir}" NAME)

message("a_second_last_dir = ${a_second_last_dir}")
它将
第二个\u最后一个\u dir=dir
作为输出

您可以通过以下方式获得相同的输出:

get_filename_component(a_second_dir "${some_file}/../.." ABSOLUTE)
get_filename_component(a_second_last_dir "${a_second_dir}" NAME)

message("a_second_last_dir = ${a_second_last_dir}")
中间
a_second_dir
路径可能是无效/不存在的路径(因为
CMAKE\u CURRENT\u SOURCE_dir
前面有前缀),但我认为这在这里并不重要


如果您希望它是一个正确的绝对路径,您应该自己为正确的基本目录添加前缀(或者参见CMake 3.4,它引入了
base\u dir
选项来
get\u filename\u component(…absolute)
)。

通过附加
?例如,
get\u filename\u component(第二个\u last\u dir)/some/dir/sub/././…“绝对)
我没有完整的目录可供添加
…你能给出一个目录名的示例以及你想提取的部分吗?我们是在谈论类似的事情吗?CMake的命令也允许很多事情。设法使它工作。我使用了directory of directory两次,这样我就可以得到父名称:D不是一个很好的解决方案,但它可以工作:PI仍然认为您可以使用
。/..
。请看下面我的答案。