CMake позволяет маскировать любую функцию, подобную этой
function(add_executable)
#...custom code, that may use _add_executable(${ARGN}) to call the original function
endfunction()
Но, похоже, что когда CMake проанализировал это определение функции, он установил глобальную область видимости CMake, и вложение определений функций не поддерживается:
function(echo)
message(STATUS "Original function")
endfunction()
echo() #Original function
function(nesting)
function(echo)
message(STATUS "Overwritten function")
# _echo() # Original function
endfunction()
echo() #Overwritten function
endfunction()
echo() #Still Overwritten function, expected Original function
Это также не будет работать, если вы include
добавите новое определение, или даже если вы определите его в CMakeLists, добавленном add_subdirectory
.Использование макросов также не помогает:
macro(echo)
_echo(${ARGN})
endmacro(echo)
echo() #Still Overwritten function, but now even _echo() is overwritten
Есть ли способ вернуть старое значение функции?