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_LINECMAKE_CURRENT_LIST_DIR