CMake:父目录?

时间:2011-08-12 04:55:47

标签: cmake parent

我有一个非常简单的问题。 如何在CMake中找到父目录?

假设${MYPROJECT_DIR}=/dir1/dir2/dir3/myproject/和我想要${PARENT_DIR}=/dir1/dir2/dir3/

怎么做? SET(PARENT_DIR ${MYPROJECT_DIR}/../)似乎不是正确的语法...

非常感谢。

3 个答案:

答案 0 :(得分:39)

从CMake 2.8.12开始,推荐的方法是使用带有DIRECTORY选项的get_filename_component命令:

get_filename_component(PARENT_DIR ${MYPROJECT_DIR} DIRECTORY)

对于旧版本的CMake,请使用PATH选项:

set (MYPROJECT_DIR /dir1/dir2/dir3/myproject/)
get_filename_component(PARENT_DIR ${MYPROJECT_DIR} PATH)

答案 1 :(得分:1)

对我来说它不起作用(在 cmake 3.18)。 我最终使用了:

get_filename_component(VAR_PARENT ${MYPROJECT_DIR}/.. ABSOLUTE)

答案 2 :(得分:1)

从 CMake 3.20 开始,您可以使用 cmake_path 命令获取给定路径的父目录:

<块引用>
cmake_path(GET <path-var> PARENT_PATH <out-var>)

此命令取代 get_filename_component 命令。

因此,在您的示例中,它看起来像这样:

cmake_path(GET MYPROJECT_DIR PARENT_PATH PARENT_DIR)

也可以先检查路径是否有父目录组件:

cmake_path(HAS_PARENT_PATH MYPROJECT_DIR MyDir_HAS_PARENT)
if(MyDir_HAS_PARENT)
    cmake_path(GET MYPROJECT_DIR PARENT_PATH PARENT_DIR)
endif()

这实际上并不检查文件系统以验证有效路径,但它是一个非常有用的路径操作命令。