Я пытаюсь написать некоторый код CMake в относительно сложном проекте, и у меня есть модуль, который внутренне включает другой модуль. Проблема в том, что всякий раз, когда я включаю свой модуль, все функции, определенные в модуле, который он включает в себя, становятся доступными на глобальном уровне! Это фактически загрязняет мое глобальное пространство имен набором функций, которые я явно не запрашивал.
Например:
# CMakeLists.txt
# Include my module
include(MyModule)
# Call a function from my module
my_module_function()
# HERE IS THE PROBLEM -- functions from "AnotherModule" are visible here!
# This call works
another_module_function()
Внутри моего модуля:
# MyModule.cmake
# Include another module
# - This other module is written and supported by someone else so I can't modify it
# - No functions from "AnotherModule" will be used outside of "MyModule"
include(AnotherModule)
# Define my function
function(my_module_function)
# Call a function from the other module
another_module_function()
endfunction()
Есть ли какой-либо способ внутри MyModule.cmake
, чтобы я мог импортировать функции из AnotherModule.cmake
, не видя их вне моего собственного модуля? Этот другой модуль написан кем-то другим, поэтому я не имею над ним контроля, и он включает в себя другие функции с очень общими c именами, такими как parse_arguments
, которые потенциально могут вызвать конфликт имен в дальнейшем.
Было бы идеально сделать функции из AnotherModule.cmake
полностью невидимыми вне MyModule.cmake
, но даже если бы существовал простой способ имитировать пространство имен для импортируемых функций, которое было бы лучше, чем ничего.