You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
CMAKE_CURRENT_FUNCTION_LIST_DIR
|
|
-------------------------------
|
|
|
|
.. versionadded:: 3.17
|
|
|
|
When executing code inside a :command:`function`, this variable
|
|
contains the full directory of the listfile that defined the current function.
|
|
|
|
It is quite common practice in CMake for modules to use some additional files,
|
|
such as templates to be copied in after substituting CMake variables.
|
|
In such cases, a function needs to know where to locate those files in a way
|
|
that doesn't depend on where the function is called. Without
|
|
``CMAKE_CURRENT_FUNCTION_LIST_DIR``, the code to do that would typically use
|
|
the following pattern:
|
|
|
|
.. code-block:: cmake
|
|
|
|
set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
|
|
|
function(foo)
|
|
configure_file(
|
|
"${_THIS_MODULE_BASE_DIR}/some.template.in"
|
|
some.output
|
|
)
|
|
endfunction()
|
|
|
|
Using ``CMAKE_CURRENT_FUNCTION_LIST_DIR`` inside the function instead
|
|
eliminates the need for the extra variable which would otherwise be visible
|
|
outside the function's scope.
|
|
The above example can be written in the more concise and more robust form:
|
|
|
|
.. code-block:: cmake
|
|
|
|
function(foo)
|
|
configure_file(
|
|
"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/some.template.in"
|
|
some.output
|
|
)
|
|
endfunction()
|
|
|
|
See also :variable:`CMAKE_CURRENT_FUNCTION`,
|
|
:variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE` and
|
|
:variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`.
|