我正在使用带有
add_subdirectory
的第三方项目,另一个项目声明 cmake_minimum_required(VERSION 2.8.11)
,并且使用最近的 CMake 我得到:
CMake Deprecation Warning at External/libmsym/CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
由于这是一个单独的项目(它作为 git 子模块获取)并且我没有写入权限,因此我无法真正按照建议解决问题。如果这是通过
ExternalProject
配置的,我可以使用 PATCH_COMMAND
功能,但我不认为在这种情况下我可以做类似的事情。除了为此挑剔创建一个分叉之外,还有其他方法可以禁用此警告或覆盖子目录中的 cmake_minimum_required
语句吗?
编辑:显然
CMAKE_WARN_DEPRECATED
或 -Wno-deprecated
可以做到这一点,但前者有一些奇怪(它必须保存在缓存中才能工作,请参阅Cannot set CMAKE_WARN_DEPRECATED inside the CMakeLists.txt),其中使得在本地切换特定的add_subdirectory
变得很麻烦。
据我所知,您无法禁用此警告。这是使用
add_subdirectory
的缺点。他们的代码在某种程度上成为你的代码。它们的缓存变量与您的缓存变量混合。等等
这就是为什么像 vcpkg 和 conan 这样的包管理器非常好。使用
find_package
让您不必太关心项目 CMake 代码的质量。或者,如果他们使用的是真正旧式的 CMake(如本例所示)。
如果你需要的话,他们还有办法修补项目(我知道 vcpkg 可以,我假设 conan 也可以)。
此类功能可能会添加到
add_subdirectory
。毕竟在 3.25 中,他们添加了 SYSTEM
参数,以方便通过 add_subdirectory
使用第三方库。
但目前的答案是你要么必须修复项目,要么使用包管理器(这实际上只是为你隐藏警告,除非有人已经在他们的端口中修补了警告)。