CMake:父目录?

Vin*_*ent 23 cmake

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

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

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

非常感谢你.

sak*_*kra 41

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

get_filename_component(PARENT_DIR ${MYPROJECT_DIR} DIRECTORY)
Run Code Online (Sandbox Code Playgroud)

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

set (MYPROJECT_DIR /dir1/dir2/dir3/myproject/)
get_filename_component(PARENT_DIR ${MYPROJECT_DIR} PATH)
Run Code Online (Sandbox Code Playgroud)

  • 如果我想要父母的父母?意思是“ / dir1 / dir2 /”? (4认同)

squ*_*les 9

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

cmake_path(GET <path-var> PARENT_PATH <out-var>)
Run Code Online (Sandbox Code Playgroud)

该命令取代该get_filename_component命令。

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

cmake_path(GET MYPROJECT_DIR PARENT_PATH PARENT_DIR)
Run Code Online (Sandbox Code Playgroud)

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

cmake_path(HAS_PARENT_PATH MYPROJECT_DIR MyDir_HAS_PARENT)
if(MyDir_HAS_PARENT)
    cmake_path(GET MYPROJECT_DIR PARENT_PATH PARENT_DIR)
endif()
Run Code Online (Sandbox Code Playgroud)

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