【问题标题】:CMake Static Library linking (Precompiled .a) [duplicate]CMake静态库链接(预编译的.a)[重复]
【发布时间】:2019-09-13 12:27:58
【问题描述】:

一个星期以来,我一直在日夜处理这个问题。我已经阅读了 Google、Stackoverflow 和 Github 上的每一页。

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(EDKPOC)

add_library(BCXConfiguration STATIC IMPORTED)

set_target_properties(BCXConfiguration PROPERTIES
        IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/main/liBCXConfiguration.a"
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/main/include")

link_directories(${CMAKE_CURRENT_LIST_DIR})

target_link_libraries(EDKPOC BCXConfiguration)

运行 CMake 时出现此错误:

CMake Error at CMakeLists.txt:20 (target_link_libraries):
  Cannot specify link libraries for target "EDKPOC" which is not built
  by this project.

【问题讨论】:

  • 这个文件是做什么用的? add_library 构建了一个库,但是您尝试将该库链接到其他东西?
  • 虽然duplicate question 最初 没有包含您的问题的答案,但我已经添加了该答案。在单个标题下(在单个问题中)出现相同错误消息的不同问题将有助于未来的访问者更快地找到问题的解决方案。

标签: c++ cmake static esp32 precompiled


【解决方案1】:

target_link_libraries() 命令用于将给定目标与其相关目标链接。您指定EDKPOC 作为命令的第一个参数;这是您的项目名称,但它不是有效的目标。您在示例 CMake 文件中指定的唯一目标是 BCXConfiguration。如果您想将此静态库链接到 CMake 项目中其他位置的另一个目标(例如 MyOtherLibraryTarget),您的语法可能如下所示:

target_link_libraries(MyOtherLibraryTarget PUBLIC BCXConfiguration)

如果您的 CMake 层次结构中没有其他目标,则此命令是不必要的,可以省略。

【讨论】:

  • 谢谢,但这给我带来了另一个错误。当我使用这个链接的 BCXConfiguration.a 文件时。我引用了 BCXConfiguration.h 文件并在该文件中使用了类和 BEDK::BCXConfiguration *bcx = new BEDK::BCXConfiguration();并给出未定义的参考错误
  • @MesutA.:请用新问题的描述更新问题帖子。此描述应包括您更新的CMakeLists.txt。在我们看不到的文件中很难捕捉到错误。
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2019-09-17
相关资源
最近更新 更多