我正在尝试在一个相对复杂的项目中编写一些 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
而不让它们在我自己的模块之外可见?这个另一个模块是由其他人编写的,所以我无法控制它,它包括其他具有非常通用名称的函数,比如一个parse_arguments
可能会在以后导致命名冲突的函数。
使函数从AnotherModule.cmake
外部完全不可见MyModule.cmake
将是理想的,但即使有一种简单的方法来模拟一个名称空间以供导入的函数进入,这也总比没有好。