首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“target_link_libraries的使用必须是全关键字或全纯的”

“target_link_libraries的使用必须是全关键字或全纯的”
EN

Stack Overflow用户
提问于 2017-12-10 09:36:53
回答 2查看 4.8K关注 0票数 20

我成功地构建了llvm和clang,现在我正试图根据ClangTool创建一个clang文档。但是,当我试图构建它时,我得到了以下错误:

代码语言:javascript
运行
复制
CMake Error at tools/clang/tools/loop-convert/CMakeLists.txt:6 (target_link_libraries):
  The keyword signature for target_link_libraries has already been used with 
  the target "loop-convert".  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:

    * cmake/modules/LLVM-Config.cmake:105 (target_link_libraries)
    * cmake/modules/AddLLVM.cmake:771 (target_link_libraries)

我目前的CMakeLists.txt是:

代码语言:javascript
运行
复制
set(LLVM_LINK_COMPONENTS support)

add_clang_executable(loop-convert
  LoopConvert.cpp
)

target_link_libraries(loop-convert
  clangTooling
  clangBasic
  clangASTMatchers
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-10 10:55:33

您需要使用target_link_libraries的关键字签名;实际上,需要将PRIVATE添加到CMakeLists.txt中的target_link_libraries语句中。

代码语言:javascript
运行
复制
target_link_libraries(loop-convert PRIVATE
  clangTooling
  clangBasic
  clangASTMatchers
)

这是因为add_llvm_executable使用这样的签名,您不能将它们混合在CMake中。

票数 17
EN

Stack Overflow用户

发布于 2021-11-29 07:09:17

国际水文学组织,CMake应该只是打印一个迂腐的警告,而不是硬打破人们一直依赖的API。下面的代码使函数向后兼容,同时仍然允许使用更新的签名.它打印警告以提醒您升级代码。

代码语言:javascript
运行
复制
function(target_link_libraries target)
    if(ARGV1 MATCHES "^(PRIVATE|PUBLIC|INTERFACE)$")
        _target_link_libraries(${target} ${ARGN})
    else()
        _target_link_libraries(${target} PUBLIC ${ARGN})
        message(AUTHOR_WARNING "target_link_libraries: missing PRIVATE, PUBLIC or INTERFACE for target ${target}. Defaulting to PUBLIC.")
    endif()
endfunction()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47737558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档