我有一个非常简单的问题。 如何在CMake中找到父目录?
假设${MYPROJECT_DIR}=/dir1/dir2/dir3/myproject/
和我想要${PARENT_DIR}=/dir1/dir2/dir3/
。
怎么做?
SET(PARENT_DIR ${MYPROJECT_DIR}/../)
似乎不是正确的语法...
非常感谢。
答案 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()
这实际上并不检查文件系统以验证有效路径,但它是一个非常有用的路径操作命令。