我成功地构建了llvm和clang,现在我正试图根据ClangTool创建一个clang文档。但是,当我试图构建它时,我得到了以下错误:
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是:
set(LLVM_LINK_COMPONENTS support)
add_clang_executable(loop-convert
LoopConvert.cpp
)
target_link_libraries(loop-convert
clangTooling
clangBasic
clangASTMatchers
)
发布于 2017-12-10 10:55:33
您需要使用target_link_libraries
的关键字签名;实际上,需要将PRIVATE
添加到CMakeLists.txt
中的target_link_libraries
语句中。
target_link_libraries(loop-convert PRIVATE
clangTooling
clangBasic
clangASTMatchers
)
这是因为add_llvm_executable
使用这样的签名,您不能将它们混合在CMake中。
发布于 2021-11-29 07:09:17
国际水文学组织,CMake应该只是打印一个迂腐的警告,而不是硬打破人们一直依赖的API。下面的代码使函数向后兼容,同时仍然允许使用更新的签名.它打印警告以提醒您升级代码。
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()
https://stackoverflow.com/questions/47737558
复制相似问题