Use libbitcoin in CLion

梦想与她 提交于 2020-03-21 10:43:29

问题


I am not a C++ programmer, only have made a course a while ago. Using homebrew I installed libbitcoin and was hoping that I can reference the library like I was able to reference the boost libraries. I also realized that there are no links in /usr/local/bin to the Cellar. I think I could get it working by using the absolute paths but I am looking for the proper way of handling this constellation that I just mentioned.

Current CMake:

cmake_minimum_required(VERSION 2.8.4)

project(cplusplus)

message(STATUS "start running cmake...")

find_package(boost 1.65.1 COMPONENTS system filesystem REQUIRED)
find_package(libbitcoin 3.3.0 COMPONENTS system filesystem REQUIRED)

message("system: ${CMAKE_SYSTEM_PREFIX_PATH}")
find_library(LIB_BITCOIN libbitcoin)
message("bitcoin: ${LIB_BITCOIN}")

if(Boost_FOUND)
    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")
    include_directories(${Boost_INCLUDE_DIRS})
 endif()

 add_executable(cplusplus main.cpp)

 if(Boost_FOUND)
     target_link_libraries(cplusplus ${Boost_LIBRARIES})
 endif()

Currently I get these errors:

/Applications/CLion.app/Contents/bin/cmake/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /Users/johndow/Documents/Workspace/bitcoin-code/cplusplus
-- start running cmake...
-- Boost version: 1.65.1
CMake Error at CMakeLists.txt:8 (find_package):
  By not providing "Findlibbitcoin.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "libbitcoin", but CMake did not find one.

  Could not find a package configuration file provided by "libbitcoin"
  (requested version 3.3.0) with any of the following names:

  libbitcoinConfig.cmake
  libbitcoin-config.cmake

  Add the installation prefix of "libbitcoin" to CMAKE_PREFIX_PATH or set
  "libbitcoin_DIR" to a directory containing one of the above files.  If
  "libbitcoin" provides a separate development package or SDK, be sure it has
  been installed.


-- Configuring incomplete, errors occurred!
See also "/Users/johndoe/Documents/Workspace/bitcoin-code/cplusplus/cmake-build-debug/CMakeFiles/CMakeOutput.log".

[Finished]

回答1:


You seem to have double lookup for libbitcoin library in your CMakeLists file. You are first looking for it by:

find_package(libbitcoin ...) 

and then by

find_library(LIB_BITCOIN libbitcoin)

Cmake is not happy (as your error message says) with the find_package() clause as libbitcoin does not provide cmake configuration by itself. You have many ways how to fix it, just two of them:

  1. remove find_package() and use only find_library(), I think this is the simpler way and your project should work this way

  2. provide cmake configuration for libbitcoin by yourself. Good introduction how to do this is here (and good to read anyway): https://cmake.org/Wiki/CMake:How_To_Find_Libraries




回答2:


As far as I know, currently libbitcoin does not export any <libbitcoin>Config.cmake package.

But it does export a libbitcoin.pc file for generic use with pkg-config.

ie: /usr/local/lib/pkgconfig/libbitcoin.pc

If you get results from invoking pkg-config --cflags libbitcoin then it's there.

And then you can put something like this in your CMakeLists.txt:

#use this if libbitcoin is installed to some custom location
set(ENV{PKG_CONFIG_PATH} "/path/to/libbitcoin/pkgconfig/:$ENV{PKG_CONFIG_PATH}")

#then later..
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIB_BITCOIN REQUIRED libbitcoin) 

#then later..
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIB_BITCOIN_LIBRARIES})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIB_BITCOIN_INCLUDE_DIRS})

That should pull in boost, make the libbitcoin includes visible and solve all manner of compiler and linker woes.

(Or if you are feeling mad, you could always make use of this gist).



来源:https://stackoverflow.com/questions/46479904/use-libbitcoin-in-clion

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!