我正在Cpp中构建一个项目,该项目将通过rabbitmq与我的Java应用程序通信,并将更新发布到twitter。我正在使用github 的一些库
-
rabbitmq-c
Rabbit已安装到/usr/local/lib64
-
jansson-json库
我不久前为另一个项目安装了这个,转到/usr/local/lib
-
twitcurl-用于Twitter API 的C库
已安装到/usr/local/lib
如果重要的话,我使用CLion作为我的IDE,在定义includes时,它会在auto-complete下显示jansson和rabbit,所以这是在某种程度上从我的系统中挑选libs
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)
我错过了什么??感谢
CMake变量区分大小写,因此变量${project_name}
会产生一个空字符串。改为使用${PROJECT_NAME}
,即:
target_link_libraries(${PROJECT_NAME} twitcurl jansson rabbitmq)
运行带有标志--warn-uninitialized
的CMake可以帮助您检测这样的错误。