所以我有:
get_filename_component(a_dir ${some_file} PATH) get_filename_component(a_last_dir ${a_dir} NAME)
其中a_last_dir应该返回我的目录的最低级别,a_dir应该返回我的完整目录.
无论如何我可以使a_second_last_dir成为可能吗?要返回完整目录的第二个较低级别?
把我的评论转化为答案
您可以get_filename_component()
通过追加使用../..
.
我了解您当前的解决方案如下所示:
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}")
这给出a_second_last_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_CURRENT_SOURCE_DIR
是前缀的),但我认为这并不重要.
如果你想让它成为一个正确的绝对路径,你应该自己为正确的基地dir添加前缀(或者参见引入BASE_DIR
选项的CMake 3.4 get_filename_component(... ABSOLUTE)
).