C++ 默认的目标链接库隐私设置是什么?
我想知道什么是默认的C++ 默认的目标链接库隐私设置是什么?,c++,cmake,C++,Cmake,我想知道什么是默认的target\u link\u库privacy 我在CMake中添加了一行: target_link_libraries(myTarget libraryA libraryB ) 但是我不知道它是私有的还是公共的,或者可能是接口的。 我检查了一下,但我看不到问题的答案:( 编辑: 我发现: 最后,如果调用target_link_libraries()而不 指定私有、公共或接口中的任何一个,您可能会尝试 相信它会被视为公众。事实
target\u link\u库
privacy
我在CMake中添加了一行:
target_link_libraries(myTarget
libraryA
libraryB
)
但是我不知道它是私有的
还是公共的
,或者可能是接口的
。
我检查了一下,但我看不到问题的答案:(
编辑:
我发现:
最后,如果调用target_link_libraries()而不
指定私有、公共或接口中的任何一个,您可能会尝试
相信它会被视为公众。事实上,情况是这样的
但比这更复杂。它可能被视为公开或公开
PRIVATE,具体取决于其他目标链接库()调用和/或
已执行目标属性操作。文档
对于target_link_libraries()来说,有一点关于这一点,但您必须离开
深入研究它提到的目标属性的文档
了解什么情况下会导致私人或
公众行为
什么情况?(顺便说一句,这句话的作者是克雷格·斯科特,他似乎是SO的活跃用户,我相信他能回答我……。的描述表明,没有“默认值”target\u link\u库的行为
-每个项目都应该调用此命令,要么全部使用关键字,要么不使用关键字:
普通和关键字目标链接库签名不能混合
“当然有一个是执行的……”-默认链接在
PUBLIC
、PRIVATE
和INTERFACE
区域中没有直接等效项。如果只使用target\u link\u库
调用,它们的调用将具有即时和传递效果,如PUBLIC
。但对于某些其他命令和访问属性,传递效果可能是ost,所以行为类似于PRIVATE
。CMake倾向于不破坏旧(遗留)代码。因此,如果您只使用旧CMake中存在的函数(例如,直到版本2.8),您可能期望这些函数即使在较新的CMake解释器中也能工作。但您会将旧函数与新的(“现代”)函数混合使用吗一个,奇怪的事情可能会发生。但是为什么没有直接的等价物呢?你是说我们不能通过编写像target\u link\u libraries(mylib A)
这样的关键字版本来实现相同的行为target\u link\u libraries(mylib A)
?@IgNite:是的,使用关键字无法实现与没有关键字时完全相同的行为。