我有一个非常简单的问题.如何在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)
从 CMake 3.20 开始,您可以使用以下cmake_path命令获取给定路径的父目录:
Run Code Online (Sandbox Code Playgroud)cmake_path(GET <path-var> PARENT_PATH <out-var>)
该命令取代该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)
这实际上并不检查文件系统来验证有效路径,但它是一个非常有用的路径操作命令。