这篇文章上次修改于 464 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

CMake中的语句:

target_link_libraries(A <SCOPE> B)
target_link_libraries(C A)

表示A依赖于B,即B时A的依赖项;C依赖于A。

PRIVATE:B仅链接到A,C不会链接B
INTERFACE:B不链接到A,C会链接B
PUBLIC:B链接到目标A,C也会链接B

从使用的角度解释,若有C链接了目标A:
如果依赖项B仅用于目标A的实现,且不在头文件中提供给C使用,使用PRIVATE
如果依赖项B不用于目标A的实现,仅在头文件中作为接口提供给C使用,使用INTERFACE
如果依赖项B不仅用于目标A的实现,而且在头文件提供给C使用,使用PUBLIC