c++ - करण - राजस्थान में पुस्तकालय का विकास




सीएमके के साथ सीएलओएन सी++ परियोजना में बाहरी पुस्तकालय(बूस्ट) कैसे शामिल करें? (2)

मेरे पास सी ++ विकास के लिए निम्न सेटअप है:

  • OS X Yosemite
  • CLion 140.2310.6 (एक क्रॉस- CLion 140.2310.6 सी / सी ++ - CLion 140.2310.6 का निर्माण प्रणाली के रूप में जेटब्रेन द्वारा आईडीई)
  • brew install boost boost माध्यम से brew install boost /usr/local/Cellar/boost/

अब, मेरा लक्ष्य एक साधारण परियोजना स्थापित करना और boost लाइब्रेरी शामिल करना है। मैंने केवल एक test.cpp फ़ाइल परिभाषित की है जो इस तरह दिखती है:

#include <iostream>
#include <boost>

using namespace std;

int test() {
    cout << "Hello, World!" << endl;
    return 0; 
}

मेरी CMakeLists.txt फ़ाइल इस तरह दिखती है:

cmake_minimum_required(VERSION 2.8.4) 
project(MyProject)

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

include_directories("/usr/local/Cellar/boost/1.57.0/include/boost")

set(SOURCE_FILES main.cpp ./test.cpp)
add_executable(MyProject ${SOURCE_FILES}) 

जब मैं प्रोजेक्ट का निर्माण करता हूं, तो मुझे निम्न त्रुटि मिलती है:

/Users/nburk/Documents/uni/master/master_thesis/MyProject/test.cpp इस:10: घातक त्रुटि: 'बूस्ट' फ़ाइल नहीं मिली

[3]: *** [सीएमकेफ़ाइल / MyProject.dir / test.cpp.o] त्रुटि 1 बनाते हैं [2]: *** [सीएमकेफ़ाइल / MyProject.dir / सभी] त्रुटि 2 बनाते हैं [1]: *** [सीएमकेफ़ाइल / MyProject.dir / नियम] त्रुटि 2 बनाने: *** [MyProject] त्रुटि 2

मैंने यहां और वहां पथ समायोजित करने के साथ खेला और add_library और add_library का भी उपयोग किया, जिनमें से कोई भी परियोजना को सफलतापूर्वक निर्माण नहीं किया।

क्या कोई सही दिशा में इंगित कर सकता है कि यह सुनिश्चित करने के लिए कि मैं अपने CLion C ++ प्रोजेक्ट में boost एस कार्यक्षमता शामिल कर सकता हूं?

अपडेट करें: @ वैक्सो के उत्तर के लिए धन्यवाद मैंने अपने CMakeLists.txt फ़ाइल में निम्न कोड का उपयोग किया जो:

set(Boost_INCLUDE_DIR /usr/local/Cellar/boost/1.57.0)
set(Boost_LIBRARY_DIR /usr/local/Cellar/boost/1.57.0/lib)
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})

अब मुझे फाइल मिली है जो आतंक नहीं मिली , लेकिन इसके बजाय मुझे निम्नलिखित मिलते हैं:

सीएमके त्रुटि / अनुप्रयोग / CLION EAP.app/Contents/bin/cmake/share/cmake-3.1/Modules/FindBoost.cmake:685 (फ़ाइल) पर त्रुटि:

फ़ाइल STRINGS फ़ाइल "/usr/local/Cellar/boost/1.57.0/boost/version.hpp" को पढ़ा नहीं जा सकता है।

कॉल स्टैक (सबसे हालिया कॉल पहले): CMakeLists.txt: 11 (find_package)

कोई विचार जो मैं अभी भी लापता हूं? FindBoost.cmake में निर्दिष्ट पंक्ति (685) है: file(STRINGS "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS REGEX "#define BOOST_(LIB_)?VERSION ")


इस मुद्दे पर पूरी दोपहर बिताने के बाद, मैंने इसे स्वयं हल किया। यह एक बेवकूफ गलती थी और @ वैक्सो के जवाब में सभी संकेत वास्तव में सहायक थे।

कारण यह मेरे लिए काम नहीं कर रहा था कि मैंने अपने test.cpp -file में #include <boost> लिखा था, जो स्पष्ट रूप से गलत है। इसके बजाए, आपको सीधे उन हेडर फ़ाइलों को संदर्भित करने की आवश्यकता है जिन्हें आप वास्तव में शामिल करना चाहते हैं, इसलिए आपको #include <boost/thread.hpp> लिखना चाहिए।

आखिरकार, कथन का संक्षिप्त अनुक्रम सफलतापूर्वक (और प्लेटफॉर्म-स्वतंत्र रूप से) के लिए पर्याप्त होना चाहिए, जिसमें CMake परियोजना में boost शामिल है:

find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostTest main.cpp)
target_link_libraries(BoostTest ${Boost_LIBRARIES})

ये रेखाएं जादू कर रही हैं। संदर्भ के लिए, यहां एक पूर्ण CMakeLists.txt फ़ाइल है जिसे मैंने एक अलग कमांड लाइन प्रोजेक्ट में डिबगिंग के लिए उपयोग किया था:

cmake_minimum_required(VERSION 2.8.4)

project(BoostTest)

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

find_package(Boost 1.57.0 COMPONENTS system filesystem REQUIRED)

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(BoostTest main.cpp)

if(Boost_FOUND)

    target_link_libraries(BoostTest ${Boost_LIBRARIES})

endif()

सीएमके find_package (बूस्ट) का उपयोग करने का प्रयास करें

src: http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html

यह बेहतर काम करता है और सीएमके को क्रॉस संकलन के लिए बनाया जाता है और सीएमके परियोजना में पूर्ण पथ देना अच्छा नहीं होता है।

संपादित करें:

इसे भी देखें: सीएम + प्रोग्राम को सीएमके का उपयोग करके बूस्ट के साथ कैसे लिंक करें

क्योंकि आप वास्तव में बूस्ट लाइब्रेरी को अपने निष्पादन योग्य से लिंक नहीं करते हैं।

बढ़ावा देने के साथ सीएमके आमतौर पर ऐसा लगता है:

set(Boost_USE_STATIC_LIBS        ON) # only find static libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.57.0 COMPONENTS date_time filesystem system ...)
if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(foo foo.cc)
  target_link_libraries(foo ${Boost_LIBRARIES})
endif()




clion