在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 次 |
最近记录: |