Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认的目标链接库隐私设置是什么?_C++_Cmake - Fatal编程技术网

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:是的,使用关键字无法实现与没有关键字时完全相同的行为。