尽管没有使用LINK_INTERFACE_LIBRARIES,为什么会发出CMake CMP0022警告?

时间:2013-11-17 18:46:07

标签: cmake

在我的整个代码中,我从不使用LINK_INTERFACE_LIBRARIES或类似的东西。所有的install,export和link_ *命令都没有使用。我能够grep的唯一有点类似的事情是在lib / CMakeFiles / Export / lib / cmake / mylib-targets-noconfig.cmake文件的构建目录中:

  

IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG“CXX”   IMPORTED_LINK_INTERFACE_LIBRARIES_NOCONFIG

仍然,我收到CMP0022警告:

  

lib / CMakeLists.txt中的CMake警告(dev):未设置策略CMP0022:   INTERFACE_LINK_LIBRARIES定义链接界面。运行“cmake   --help-policy CMP0022“用于策略详细信息。使用cmake_policy命令设置策略并禁止显示此警告。

     

目标“mylib”具有INTERFACE_LINK_LIBRARIES属性。这应该   首选作为此库的链接接口的源,但是   因为没有设置CMP0022,CMake忽略了属性并使用了   而是将链接实现作为链接接口。

     

INTERFACE_LINK_LIBRARIES:

当我将外部库链接到mylib时会发生这种情况。当我使用CMake 2.8.12.1改进CMP0022的处理而不是2.8.12时,警告的数量大大减少,每个外部库只有一个警告。

警告的原因是什么?从文档中我得不到它。
我该怎么做才能摆脱这个警告?这与旧版本兼容吗?

3 个答案:

答案 0 :(得分:2)

发布了CMake 2.8.12.1来解决这个问题。请尝试该版本。

答案 1 :(得分:2)

与此同时,在CMake邮件列表中发布了类似的问题。斯蒂芬凯利回答有三种选择。 [12]我最喜欢的人使用LINK_PRIVATELINK_PUBLIC。但它只向后兼容CMake 2.8.9。

答案 2 :(得分:-4)

尝试放置此块:

IF(COMMAND CMAKE_POLICY)

  CMAKE_POLICY(SET ???? OLD)

  CMAKE_POLICY(SET ???? OLD)

ENDIF(COMMAND CMAKE_POLICY)

在哪里?是违规政策的名称

我还没有读过太多关于此的内容,但我认为是因为他们添加了一种机制来设置目标属性以避免在处理不同目标时产生歧义,无论如何,如果新版本的CMake警告你一些策略,您可以将该策略设置为旧行为。

https://cmake.org/cmake/help/v3.0/policy/CMP0022.html