【问题标题】:CMake rejects a second target_link_libraries talking about "keyword" vs "plain" [duplicate]CMake拒绝第二个target_link_libraries谈论“关键字”与“普通”[重复]
【发布时间】:2019-12-29 18:42:57
【问题描述】:

我正在编译一个二进制文件,出于各种原因,我想在两个不同的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)

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

【问题讨论】:

    标签: cmake build-dependencies


    【解决方案1】:

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

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

    因此,您可以将 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-06
      • 2014-03-08
      • 2012-01-26
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多