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