我是CMake的新手,对与相关的PUBLIC,PRIVATE和INTERFACE关键字有点困惑target_link_libraries()
。文档中提到它们可用于在一个命令中同时指定链接依赖性和链接接口。
链接依赖关系和链接接口实际上是什么意思?
我是CMake的新手,对与相关的PUBLIC,PRIVATE和INTERFACE关键字有点困惑target_link_libraries()
。文档中提到它们可用于在一个命令中同时指定链接依赖性和链接接口。
链接依赖关系和链接接口实际上是什么意思?
Answers:
如果要创建共享库,并且源cpp文件#include另一个库的标头(例如,QtNetwork),但是标头文件不包含QtNetwork标头,则QtNetwork是一个PRIVATE
依赖项。
如果您的源文件和标头包含另一个库的标头,则它是一个PUBLIC
依赖项。
如果您的头文件而不是源文件包括另一个库的头,则它是一个INTERFACE
依赖项。
的其他构建属性PUBLIC
和INTERFACE
依赖项会传播到使用的库。http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements
PUBLIC
或PRIVATE
重要?它会发生什么变化?
PRIVATE
不会将您的依赖项添加到链接到库的项目中。它更干净,并且还避免了依赖项和用户之间的可能冲突。
PUBLIC
依赖项,而不是一个INTERFACE
依赖。