我有git子模块,CMakeLists.txt其中包含由于CMP0048而导致警告的文件.警告看起来像这样:
CMake Warning (dev) at submodule_directory/CMakeLists.txt:24 (project):
Policy CMP0048 is not set: project() command manages VERSION variables.
Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The following variable(s) would be set to empty:
PROJECT_VERSION
PROJECT_VERSION_MAJOR
PROJECT_VERSION_MINOR
PROJECT_VERSION_PATCH
This warning is for project developers. Use -Wno-dev to suppress it.
Run Code Online (Sandbox Code Playgroud)
我不控制这些CMakeLists.txt文件,我不想分叉,所以没有什么可以做的,我只是想让CMake闭嘴.cmake_policy(SET CMP0048 OLD)在添加子模块目录之前使用并不能解决这个问题.(我想project()重置cmake政策?).
我能做些什么吗?
如果您不关心启用该策略,最简单的解决方案就是在 CMake 命令行中设置CMAKE_POLICY_DEFAULT_CMP0048为。NEW 以下答案显示了一种替代方案,可以让您采取更零散的方法。
CMake 3.15+ 中有一个使用CMAKE_PROJECT_INCLUDE_BEFORE变量的更灵活的解决方案。请参阅我的示例:
$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 EnableCMP0048.cmake\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subproj\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\nRun Code Online (Sandbox Code Playgroud)\n我假设subproj/CMakeLists.txt包含这个:
cmake_minimum_required(VERSION 2.8.12) # Never do this\nproject(subproj)\nRun Code Online (Sandbox Code Playgroud)\n输入cmake/EnableCMP0048.cmake:
cmake_policy(SET CMP0048 NEW)\nRun Code Online (Sandbox Code Playgroud)\n输入./CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)\nproject(test VERSION 1.0.0)\n\nset(CMAKE_PROJECT_INCLUDE_BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/EnableCMP0048.cmake")\nadd_subdirectory(subproj)\nunset(CMAKE_PROJECT_INCLUDE_BEFORE) # if you don\'t want to affect subsequent add_subdirectory calls.\nRun Code Online (Sandbox Code Playgroud)\n现在这将启用CMP0048并清除子项目中提到的变量。鉴于在您的问题中,您尝试通过修改策略来解决此问题,我认为这是可以的。但如果没有,您可以添加另一个脚本cmake/RestoreProjectVars.cmake:
# Recall the top-level CMakeLists.txt had project(test).\nset(PROJECT_VERSION "${test_VERSION}")\nset(PROJECT_VERSION_MAJOR "${test_VERSION_MAJOR}")\nset(PROJECT_VERSION_MINOR "${test_VERSION_MINOR}")\nset(PROJECT_VERSION_PATCH "${test_VERSION_PATCH}")\nRun Code Online (Sandbox Code Playgroud)\n然后set(CMAKE_PROJECT_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/RestoreProjectVars.cmake")在add_subdirectory调用之前恢复这些变量。
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |