获取 CMake 错误:无法为非项目构建的目标指定链接库

Getting a CMake Error: Cannot specify link libraries for target which is not built by the project

提问人:user3859872 提问时间:9/18/2014 最后编辑:desertnautuser3859872 更新时间:5/20/2023 访问量:100596

问:

我正在我的代码中实现 CMake,但我收到错误

Cannot specify link libraries for target "Qt5::Widgets" which is not built by the project 

以下是 CMakeLists.txt 的内容:

#Specify the version being used aswell as the language
cmake_minimum_required(VERSION 2.6)

#Name your project here
project(eCAD)

#Sends the -std=c++11 flag to the gcc compiler
ADD_DEFINITIONS(-std=c++11)

#This tells CMake to main.cpp and name it eCAD
add_executable(eCAD main.cpp)


#include the subdirectory containing our libs
add_subdirectory (gui)
include_directories(gui)

#include Qt directories
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Designer)
SET(QT_USE_QTDESIGNER ON)

#link_libraries
target_link_libraries(Qt5::Widgets Qt5::Core) 
cmake的

评论


答:

54赞 wRAR 9/18/2014 #1

的第一个参数是目标名称:target_link_libraries

target_link_libraries(eCAD Qt5::Widgets Qt5::Core) 
117赞 Murphy 12/21/2016 #2

除了公认的答案之外:一个重要的细节是放在 之后,因此所有链接的组件都是已知的。target_link_librariesadd_executablefind_package

评论

0赞 Lamda 11/1/2017
目标呢?那么如何定义你的目标呢?
1赞 Murphy 11/2/2017
@Lamda 你的问题对我来说没有意义,这个线程不是关于指定目标,而是关于链接到它。如果您遇到特定问题,您应该考虑搜索 SO 并在必要时创建一个新问题。
1赞 Lamda 11/2/2017
我的问题是关于这个评论的,它似乎很受欢迎,但对我来说有点奇怪。链接库时,会将其链接到目标。add_executable将定义目标。那么,您将如何链接到尚未定义的东西呢?..很抱歉提出了一个旧话题(只是想学习一些新东西......
0赞 Murphy 11/2/2017
在上下文中阅读所有内容,首先是问题,然后是 wRAR 的答案,然后是我的答案。他们正好解决了这个问题。
0赞 Lamda 11/2/2017
哦。。不好意思。。我似乎误读了你的答案。我最初的想法是你想以另一种方式做(先链接后add_executable),因此我最初的困惑,但你写的完全相反,这更有意义。
-4赞 jingjiang 7/26/2019 #3

设置前设置you_lib_nametarget_link_libraries

set(you_lib_name libname)
target_link_libraries(you_lib_name Qt5::Widgets Qt5::Core) 

评论

1赞 Tsyvarev 5/7/2020
你的意图或代码是错误的。 command 定义变量,但需要目标。在 CMake 中,变量和目标是完全不相关的东西。settarget_link_libraries
12赞 Tsyvarev 9/13/2019 #4

另外,不要将目标名称与项目名称混淆:

  • 命令指定项目名称,但project
  • 目标是使用 或 创建的目标add_executableadd_libraryadd_custom_target

错误消息与目标有关。