我想知道什么是默认target_link_libraries隐私。
我在 CMake 中添加了一行:
target_link_libraries(myTarget
libraryA
libraryB
)
Run Code Online (Sandbox Code Playgroud)
但我不知道是不是PRIVATE,PUBLIC或者可能INTERFACE。我检查文档,但我没有看到我的问题的答案:(
编辑:
我发现某事:
最后要注意的是,如果您调用 target_link_libraries() 并且没有指定任何 PRIVATE、PUBLIC 或 INTERFACE,您可能会认为它将被视为 PUBLIC。然而,情况实际上比这更复杂。它可以被视为 PUBLIC 或 PRIVATE,具体取决于已执行的其他 target_link_library() 调用和/或目标属性操作。target_link_libraries() 的文档对此进行了一些讨论,但您必须深入研究它提到的目标属性的文档,以了解哪些情况会导致 PRIVATE 或 PUBLIC 行为。
什么情况?(顺便说一句。这句话的作者是 Craig Scott,他似乎是 SO 的活跃用户,我相信他可以回答我......)
我正在编译一个二进制文件,target_link_libraries()出于各种原因,我想在两个不同的命令中添加它的依赖库。
我的命令如下所示:
target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog baz)
Run Code Online (Sandbox Code Playgroud)
我得到错误:
The keyword signature for target_link_libraries has already been used with
the target "my_prog". All uses of target_link_libraries with a target
must be either all-keyword or all-plain.
The uses of the keyword signature are here:
* tests/CMakeLists.txt:10 (target_link_libraries)
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我该怎么办?