2016-10-07 5 views
2

Ich möchte RxCpp auf Linux (GCC) verwenden, aber ich habe Probleme, RxCpp Bibliothek passend zu meinem cmake Projekt hinzuzufügen. Ich folgte die Klonierung und Bauanleitungen und lief:RxCpp Bibliothek zu cmake Projekt hinzufügen

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 

Ich versuchte make install zu laufen, aber bekam:

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

Dann bemerkte ich die Datei libRxCpp.so in meinem Build-Verzeichnis und kopiert es:

cp libRxCpp.so /sw/RxCpp/2.3.0/ 

Ich habe ein neues Projekt in Clion erstellt, das cmake verwendet und CMakeLists.txt wie folgt geändert:

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}) 

Allerdings bekomme ich einen Fehler, wenn die cmake Projekt Aktualisierung (oder cmake in Terminal ausgeführt wird):

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

Was mache ich falsch? Wie kann ich die RxCpp-Bibliothek zu meinem CMake-Projekt hinzufügen?

Antwort

3

Sie haben target_link_libraries aufgerufen, bevor Sie das Ziel mit add_executable erstellen. Ändern Sie Ihre cmake-Datei wie folgt:

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}) 
+0

Vielen Dank. Wie kann ich die Header-Dateien von RxCpp einbinden? Es gibt kein Verzeichnis 'include'. Kann ich es trotzdem generieren? – maiermic

+1

In einer perfekten Welt hätte RxCpp [install_befehl] (https://cmake.org/cmake/help/v3.6/command/install.html) verwendet, um ein CMake-Modul zu exportieren, das ein [importiertes Ziel] deklariert. (https://cmake.org/cmake/help/v3.6/command/add_library.html#imported-libraries). Sie sollten entweder den CMake von RxCpp ändern, um diesen hinzuzufügen (damit Sie die Installation vornehmen können), oder Sie können das importierte Ziel selbst in Ihrem Projekt erstellen. Du hast damit angefangen, die Bibliothek zu finden. Finde include-Verzeichnis mit ['find_path'] (https://cmake.org/cmake/help/v3.6/command/find_path.html) – wasthishelpful

+0

Ich erwarte, dass alle benötigten Header-Dateien im Quellverzeichnis [' RxCpp/Rx /v2/src/rxcpp'](https://github.com/Reactive-Extensions/RxCpp/tree/master/Rx/v2/src/rxcpp). Ich habe dieses Verzeichnis nach '/ sw/RxCpp/2.3.0/include/rxcpp' kopiert. Jetzt muss ich 'find_library',' find_path' und dann 'add_library' (in der angegebenen Reihenfolge) aufrufen. Ist das richtig? – maiermic

Verwandte Themen