c++ - सीएमके का उपयोग करके बूस्ट के साथ सी++ प्रोग्राम को कैसे लिंक करें




boost cmake (3)

आयातित लक्ष्यों के साथ आधुनिक सीएमके वाक्यविन्यास के लिए @MOnsDaR उत्तर को अपनाना, यह होगा:

find_package(Boost 1.40 COMPONENTS program_options REQUIRED)

add_executable(anyExecutable myMain.cpp)

target_link_libraries(anyExecutable Boost::program_options)

ध्यान दें कि निर्देशिका को मैन्युअल रूप से शामिल करना आवश्यक नहीं है, क्योंकि यह पहले ही आयातित लक्ष्य Boost::program_options के माध्यम से ख्याल Boost::program_options

उबंटू के तहत बूस्ट लाइब्रेरी के साथ मेरे प्रोग्राम को जोड़ने के लिए मेरी सेमेक फ़ाइल को कैसा दिखना चाहिए?

चलने के दौरान त्रुटियां दिखाती हैं:

main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'

मुख्य फ़ाइल वास्तव में सरल है:

#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>

namespace po = boost::program_options;

int main(int argc, char** argv) {

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ;

    return 0;
}

मैंने ऐसा करने में कामयाब रहा है, केवल मेरी लाइनें जो मैंने अपनी सेमेक फाइलों में जोड़ दी हैं वे थे:

target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)

कौन सी बूस्ट लाइब्रेरी? उनमें से कई शुद्ध टेम्पलेट्स हैं और लिंकिंग की आवश्यकता नहीं है।

अब संपादित करें कि वास्तव में ठोस उदाहरण दिखाया गया है जो हमें बताता है कि आप बूस्ट प्रोग्राम विकल्प चाहते हैं (और हमें और भी बताया है कि आप उबंटू पर हैं), आपको दो चीजें करने की आवश्यकता है:

  1. libboost-program-options-dev इंस्टॉल libboost-program-options-dev ताकि आप इसके खिलाफ लिंक कर सकें
  2. cmake के खिलाफ लिंक करने के लिए libboost_program_options

मैं ज्यादातर मेकफ़ाइल का उपयोग करता हूं, इसलिए यहां प्रत्यक्ष कमांड-लाइन उपयोग है:

$ g++ boost_program_options_ex1.cpp -o bpo_ex1 -lboost_program_options
$ ./bpo_ex1
$ ./bpo_ex1 -h
$ ./bpo_ex1 --help
$ ./bpo_ex1 -help
$ 

ऐसा लगता है कि बहुत कुछ नहीं करता है।

सीएमके के लिए, आपको पुस्तकालयों की सूची में boost_program_options जोड़ने की जरूरत है, आईआईआरसी यह आपके CMakeLists.txt में SET(liblist boost_program_options) माध्यम से किया जाता है।


find_package में आप पुस्तकालयों को ढूंढने के लिए find_package का उपयोग कर सकते हैं। आपके FindBoost.cmake -इंस्टॉलेशन के साथ आमतौर पर FindBoost.cmake

जहां तक ​​मुझे याद है कि यह सामान्य पुस्तकालयों के लिए अन्य खोज-स्क्रिप्ट के साथ /usr/share/cmake/Modules/ के साथ स्थापित किया जाएगा। यह कैसे काम करता है इसके बारे में अधिक जानकारी के लिए आप उस फ़ाइल में प्रलेखन की जांच कर सकते हैं।

मैं अब काम पर नहीं हूं, इसलिए मैं सिर्फ अपने सिर से एक उदाहरण प्रदान कर सकता हूं:

FIND_PACKAGE( Boost 1.40 COMPONENTS program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )

ADD_EXECUTABLE( anyExecutable myMain.cpp )

TARGET_LINK_LIBRARIES( anyExecutable LINK_PUBLIC ${Boost_LIBRARIES} )

उम्मीद है कि यह कोड मदद करता है।





cmake