【问题标题】:CMake user built libraries; cannot specify link libraries for targetCMake 用户构建的库;无法为目标指定链接库
【发布时间】:2016-04-07 17:19:29
【问题描述】:

我正在 Cpp 中构建一个项目,它将通过 rabbitmq 与我的 Java 应用程序进行通信,并将更新发布到 twitter。我正在使用来自 github 的一些库

  1. rabbitmq-c

    Rabbit 安装到 /usr/local/lib64

  2. jansson - json library

    我为另一个项目安装了这个,去了 /usr/local/lib

  3. twitcurl - C lib for Twitter API

    安装到 /usr/local/lib

如果重要的话,我使用 CLion 作为我的 IDE,它会在定义包含时在自动完成下显示 jansson 和 rabbit - 所以这会以某种方式从我的系统中挑选出库

e.g.
#include <jansson.h>
#include <amqp.h>

我使用 target_link_libraries(name libs...) 链接它们,我看到输出显示

build$ cmake ..

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

我设置了 LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

我尝试将 CMAKE_LIBRARY_PATH 设置为包含 usr/local/lib 和 lib64,但似乎没有任何效果。这是我的 CMakeLists.txt 文件

#
# This is a CMake makefile.  You can find the cmake utility and
# information about it at http://www.cmake.org
#

cmake_minimum_required(VERSION 2.6)

set(PROJECT_NAME twitterUpdater)
set(SOURCE_FILES main.cpp)

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "/usr/local/lib"
        "/usr/local/lib64")

project(${PROJECT_NAME})
find_package(X11 REQUIRED)
find_package(OpenCV REQUIRED)

IF (X11_FOUND)
    INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR})
    LINK_LIBRARIES(${X11_LIBRARIES})
ENDIF ( X11_FOUND )

IF (OpenCV_FOUND)
    include_directories(${OpenCV_INCLUDE_DIRS})
    link_libraries(${OpenCV_LIBS})
ENDIF(OpenCV_FOUND)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_link_libraries(${project_name} twitcurl jansson rabbitmq)

让我困惑的是我使用 jansson 的另一个项目,只需在此处添加 TARGET_LINK_LIBRARIES(${project_name} dlib jansson)

我错过了什么??谢谢

【问题讨论】:

    标签: c++ c makefile linker cmake


    【解决方案1】:

    CMake 变量区分大小写,因此变量${project_name} 会产生一个空字符串。请改用${PROJECT_NAME},即:

    target_link_libraries(${PROJECT_NAME} twitcurl jansson rabbitmq)
    

    使用标志 --warn-uninitialized 运行 CMake 可帮助您检测此类错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 2023-02-06
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多