在CMake中,您可以使用相对路径转换为绝对路径
get_filename_component(ABSOLUTE_PATH ${RELATIVE_PATH} ABSOLUTE)
Run Code Online (Sandbox Code Playgroud)
但是,诸如../../other_program/基于源目录(即文件所在的CMakeLists.txt目录)的路径,而不是构建目录(即从中cmake调用的目录).如果将相对路径指定为命令行选项,则可能会导致一些混淆.
有没有办法告诉get_filename_component它应该基于当前二进制目录而不是当前源目录的相对路径?
Tor*_*örn 22
来自(突出显示为我)的文档
:get_filename_component
Run Code Online (Sandbox Code Playgroud)get_filename_component(<VAR> <FileName> <COMP> [BASE_DIR <BASE_DIR>] [CACHE])设置
<VAR>为绝对路径<FileName>,其中<COMP>之一是:
ABSOLUTE=文件的REALPATH完整路径=解决了符号链接的现有文件的完整路径如果提供的
<FileName>是相对路径,则相对于给定的基本目录评估它<BASE_DIR>.如果未提供基目录,则默认基目录为CMAKE_CURRENT_SOURCE_DIR.路径以正斜杠返回,并且没有尾部斜杠.如果
CACHE指定了可选参数,则将结果变量添加到缓存中.
因此,您使用:
get_filename_component(buildDirRelFilePath "${myFile}"
REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
Run Code Online (Sandbox Code Playgroud)
要将文件的绝对路径转换为相对路径,可以使用以下file命令:
Run Code Online (Sandbox Code Playgroud)file(RELATIVE_PATH <variable> <directory> <file>)计算从a
<directory>到a 的相对路径<file>并将其存储在<variable>.
file(RELATIVE_PATH buildDirRelFilePath "${CMAKE_BINARY_DIR}" "${myFile}")
Run Code Online (Sandbox Code Playgroud)
tvo*_*rez 12
get_filename_component(MY_RESULT_ABSOLUTE_PATH_VAR
"${CMAKE_CURRENT_LIST_DIR}/${MY_RELATIVE_PATH_VAR}"
ABSOLUTE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23413 次 |
| 最近记录: |