CMake 拒绝第二个 target_link_libraries 谈论“关键字”与“普通”

ein*_*ica 9 cmake build-dependencies

我正在编译一个二进制文件,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)

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

ein*_*ica 20

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

在一种用途中,您指定依赖项是PRIVATE; 另一方面,您不指定任何内容。这是不能接受的:你可以指定PUBLIC/ PRIVATE/INTERFACE所有的元素,或者没有。

所以,你可以修正你CMakeLists.txt的说法:

target_link_libraries(my_prog foo bar)
target_link_libraries(my_prog baz)
Run Code Online (Sandbox Code Playgroud)

或者

target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog PRIVATE baz)
Run Code Online (Sandbox Code Playgroud)