CMake : parent directory?



如何在CMake中找到父目录?

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

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

对于CMake 3.20及更新版本,推荐的方法是使用带有PARENT_PATH选项的cmake_path:

cmake_path(GET MYPROJECT_DIR PARENT_PATH PARENT_DIR)

对于旧版本到CMake 2.8.12,使用get_filename_component命令和DIRECTORY选项:

get_filename_component(PARENT_DIR ${MYPROJECT_DIR} DIRECTORY)

对于2.8.12以前的CMake版本,使用PATH选项:

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

从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()

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

对我来说它没有工作(在cmake 3.18)。最后我使用了:

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

相关内容

最新更新