如何获取函数中当前包含的cmake文件的路径?

onq*_*tam 5 cmake

假设我有这个:

#root/CMakeLists.txt
include(folder/file.cmake)
foo()
Run Code Online (Sandbox Code Playgroud)

#root/folder/file.cmake
function(foo)
    message(${SOME_SPECIAL_CMAKE_VARIABLE})
endfunction()
Run Code Online (Sandbox Code Playgroud)

我想path/to/root/folder打印出来。我尝试了这两个,但他们没有得到我想要的:CMAKE_CURRENT_LIST_DIRCMAKE_CURRENT_SOURCE_DIR.

那么是否有一个 cmake 变量可以让我得到我想要的东西?

或者有没有办法获得完整的路径,file.cmake这样我至少可以通过这种方式获得它的路径?

Cor*_*sto 1

CMake 3.17 针对这种情况引入了一个新变量:CMAKE_CURRENT_FUNCTION_LIST_DIR。在 CMake 函数内部使用,其计算结果为定义该函数的文件的绝对路径。