【问题标题】:add RxCpp library to cmake project将 RxCpp 库添加到 cmake 项目
【发布时间】:2017-02-16 08:50:29
【问题描述】:

我想在 Linux (gcc) 上使用 RxCpp,但我无法将 RxCpp 库适当地添加到我的 cmake 项目中。我按照克隆和构建说明运行:

git clone --recursive https://github.com/Reactive-Extensions/RxCpp.git
cd RxCpp

mkdir projects/build
cd projects/build
cmake -G"Unix Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -B. ../CMake
make

我尝试运行make install,但得到:

make: *** No rule to make target 'install'.  Stop.

然后,我注意到我的构建目录中的文件libRxCpp.so 并复制了它:

cp libRxCpp.so /sw/RxCpp/2.3.0/

我在Clion新建了一个项目,使用cmake,修改CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.6)
project(RxCpp_Example)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

# my try to add library RxCpp
set(RxCpp_Lib_PATH /sw/RxCpp/2.3.0/)    
find_library(RxCpp_Lib NAMES libRxCpp.so PATHS ${RxCpp_Lib_PATH})
target_link_libraries(RxCpp_Example ${RxCpp_Lib})

set(SOURCE_FILES main.cpp)
add_executable(RxCpp_Example ${SOURCE_FILES})

但是,更新 cmake 项目(或在终端中运行 cmake)时出现错误:

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

我做错了什么?如何将 RxCpp 库添加到我的 cmake 项目中?

【问题讨论】:

    标签: c++ linux c++11 gcc cmake


    【解决方案1】:

    您在使用add_executable 创建目标之前调用了target_link_libraries。像这样更改您的 cmake 文件:

    find_library(RxCpp_Lib NAMES libRxCpp.so PATHS ${RxCpp_Lib_PATH})
    
    set(SOURCE_FILES main.cpp)
    add_executable(RxCpp_Example ${SOURCE_FILES})
    
    target_link_libraries(RxCpp_Example ${RxCpp_Lib})
    

    【讨论】:

    • 谢谢。如何包含 RxCpp 的头文件?没有目录include。我可以生成它吗?
    • 在理想情况下,RxCpp 会使用install command 来导出声明imported target 的cmake 模块。您应该修改 RxCpp 的 cmake 以添加它(这样您就可以进行安装),或者在您的项目中自己创建导入的目标。您从查找库开始。使用find_path查找包含目录
    • 我希望所有需要的头文件都在源目录RxCpp/Rx/v2/src/rxcpp中。我将此目录复制到/sw/RxCpp/2.3.0/include/rxcpp。现在我必须打电话给find_libraryfind_path,然后是add_library(按上述顺序)。这是正确的吗?
    • 这是正确的 :) add_library 将类似于 add_library(RxCpp SHARED IMPORTED) 后跟一个电话 set_target_properties(RxCpp PROPERTIES IMPORTED_LOCATION ${RxCpp_Lib} INCLUDE_DIRECTORIES ${RxCpp_Inc})。然后使用target_link_libraries(RxCpp_Example RxCpp)
    • cmake 运行时没有错误,但是当我尝试构建官方时example 找不到rxcpp/rx.hpp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多