CMake 拒绝第二次 target_link_libraries 谈论 "keyword" 与 "plain"

CMake rejects a second target_link_libraries talking about "keyword" vs "plain"

我正在编译一个二进制文件,出于各种原因,我想在两个不同的 target_link_libraries() 命令中添加它的依赖库。

我的命令是这样的:

target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog baz)

我收到错误:

  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)

这是什么意思?我该怎么办?

您对 target_link_libraries() 的使用确实有问题,因为它涉及此命令的两种不同“风格”,一种是传统的,一种是较新的。

在一次使用中,您指定的依赖是PRIVATE;另一方面,您不指定任何内容。这是不可接受的:要么为 all 元素指定 PUBLIC/PRIVATE/INTERFACE,要么为 none.

因此,您可以将 CMakeLists.txt 修改为:

target_link_libraries(my_prog foo bar)
target_link_libraries(my_prog baz)

target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog PRIVATE baz)