CMAKE_CURRENT_FUNCTION_LIST_DIR

在 3.17 版本加入.

function() 中执行代码时,此变量包含定义当前函数的列表文件的完整目录。

在 CMake 中,模块使用一些额外的文件是很常见的做法,例如在替换 CMake 变量后要复制的模板。在这种情况下,函数需要以一种不依赖于函数调用位置的方式知道在哪里找到这些文件。如果没有 CMAKE_CURRENT_FUNCTION_LIST_DIR,执行此操作的代码通常会使用以下模式:

set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")

function(foo)
  configure_file(
    "${_THIS_MODULE_BASE_DIR}/some.template.in"
    some.output
  )
endfunction()

在函数内部使用 CMAKE_CURRENT_FUNCTION_LIST_DIR 可以消除对额外变量的需求,否则这些变量在函数范围之外是可见的。上面的例子可以写成更简洁、更健壮的形式:

function(foo)
  configure_file(
    "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/some.template.in"
    some.output
  )
endfunction()

另见 CMAKE_CURRENT_FUNCTIONCMAKE_CURRENT_FUNCTION_LIST_FILECMAKE_CURRENT_FUNCTION_LIST_LINE