如何确定 CMake 函数的范围,使其无法从文件外部访问?
How can I scope a CMake function so it can't be accessed from outside a file?
我正在尝试在一个相对复杂的项目中编写一些 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
之外完全不可见将是理想的,但即使有一种简单的方法来为导入的函数模拟一个命名空间,那也是聊胜于无
在 CMake 中,宏和函数具有 全局可见性,没有什么可以改变这一点。
通常一个函数,"internal" 到一些模块,是用下划线 (_
) 前缀定义的。这样的前缀起到了向外码发出信号的作用"not to use me"。但这只是一个约定,CMake 不强制任何关于下划线前缀的名称。
如果包含一个模块只有即时效果,即定义自定义 commands/targets 但不导出 functions/macros/variables 外部代码,您可以考虑用 external project (ExternalProject_Add
) 包装它。外部项目是一个单独的 CMake 项目,none 它的 CMake 变量或函数之类的东西在它外部是可见的。
我正在尝试在一个相对复杂的项目中编写一些 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
之外完全不可见将是理想的,但即使有一种简单的方法来为导入的函数模拟一个命名空间,那也是聊胜于无
在 CMake 中,宏和函数具有 全局可见性,没有什么可以改变这一点。
通常一个函数,"internal" 到一些模块,是用下划线 (_
) 前缀定义的。这样的前缀起到了向外码发出信号的作用"not to use me"。但这只是一个约定,CMake 不强制任何关于下划线前缀的名称。
如果包含一个模块只有即时效果,即定义自定义 commands/targets 但不导出 functions/macros/variables 外部代码,您可以考虑用 external project (ExternalProject_Add
) 包装它。外部项目是一个单独的 CMake 项目,none 它的 CMake 变量或函数之类的东西在它外部是可见的。