недоразумение части cmake во включении библиотеки

Я пытался включать эту pokerstove библиотеку, таким образом, я мог на самом деле включать эти заголовочные файлы в свою простую программу, таким образом, я мог вычислить некоторые акции покерной комбинации. До сих пор не движение, большое, вероятно, потому что я сталкиваюсь с этим cmake в первый раз в моей жизни

Хорошо, таким образом, это - то, какие инструкции говорит

Для создания библиотек, Вам будет нужно следующее, установленное на Вашей предпочтительной платформе:

  • повышение, версия 1.46 или выше

  • cmake, версия 2.4 или выше

  • подверсия, версия 1.7 или выше

Я получил это и также получил мерзавца и GNU компилятор C++

Затем я, как предполагается, делаю это:

git clone https://github.com/andrewprock/pokerstove.git
mkdir pokerstove/src/build
cd pokerstove/src/build
cmake ..
make

и, чем я смог бы выполнить эту командную строку

girts@girts-ThinkPad-E520: ~/pokerstove/src/build$ bin/ps-eval

И да, tnx к этому форуму "I" (конечно, который не был мной действительно) на самом деле заставил его работать. Вот мои предыдущие вопросы:

вопрос 1

вопрос 2

Тем не менее я смог скомпилировать .cpp файл с этим кодом

#include <iostream>
#include <vector>
#include <boost/algorithm/string.hpp>
#include <boost/math/special_functions/binomial.hpp>
#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>
#include <pokerstove/util/combinations.h>
#include <pokerstove/peval/Card.h>

int main(){

    std::cout << "Hello World!" << std::endl;
}

Но это, с другой стороны, не работало

#include <iostream>
    #include <pokerstove/peval/CardSet.h>

    using pokerstove::CardSet;
    using pokerstove::Card;
    using pokerstove::Rank;
    using pokerstove::Suit;

    int main(void)
    {
        CardSet big_slick(Card(Rank('A'),Suit('s')),
                          Card(Rank('K'),Suit('s')));
        std::cout << big_slick.str() << std::endl;

        CardSet dead_mans_hand("AcAs8d8hJs");
        std::cout << dead_mans_hand.str() << std::endl;
    }

Также, почему мы должны на самом деле даже выполниться

cmake ..
make

команды, если

git clone https://github.com/andrewprock/pokerstove.git

уже создает много папок включая тех, где весь .cpp и.h файлы внутри. С cmake и делают, я только создаю некоторые .run файлы, которые являются для некоторых тестов и если я выполняю их, тесты показывают, что evevrything работает превосходный, но в действительности я не мог сказать, что все работает вообще. Также существуют больше, чем просто этот CMakeLists.txt файл и инструкция не говорят, что сделать с ними

В целом я просто не добираюсь, почему наклон там быть только нормальным .cpp и.h файлами, которые можно загрузить и все работало бы на всех (на любой ОС). Почему вместо этого существует это большое кросс-платформенное решение, названное cmake. Что хороший его на самом деле выполнение здесь в моей проблеме? Я - я пропускающий некоторое огромное изображение здесь?

Спасибо за прочтение всего этого!

РЕДАКТИРОВАНИЕ: В некоторых случаях я должен включать

#include <gtest/gtest.h>

и конечно компилятор говорит мне, что нет такого каталога и это правда. Но разве этот cmake не, как, предполагается, заботится обо всем этом проекте? Поэтому я не добираюсь, как это, это - его такой большой инструмент.

Большой пример та выполненная привычка

#include <iostream>
#include <vector>
#include <string>
#include <boost/program_options.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/format.hpp>
#include <pokerstove/peval/PokerHandEvaluator.h>

using namespace std;
namespace po = boost::program_options;
using namespace pokerstove;

class EvalDriver
{
public:
    EvalDriver(const string& game, 
               const vector<string>& hands, 
               const string& board)
        : _peval(PokerHandEvaluator::alloc (game))
        , _hands(hands)
        , _board(board)
    {
    }

    void evaluate()
    {
        for (auto it=_hands.begin(); it!=_hands.end(); it++)
        {
            string& hand = *it;
            _results[hand] = _peval->evaluate(hand, _board);
        }
    }

    string str() const
    {
        string ret;
        for (auto it=_hands.begin(); it!=_hands.end(); it++)
        {
            const string& hand = *it;
            ret += boost::str(boost::format("%10s: %s\n") 
                              % hand 
                              % _results.at(hand).str());
        }
        return ret;
    }

private:
    boost::shared_ptr<PokerHandEvaluator> _peval;
    vector<string> _hands;
    string _board;
    map<string,PokerHandEvaluation> _results;
};

int main (int argc, char ** argv)
{
    string extendedHelp = "\n"
        "   For the --game option, one of the follwing games may be specified.\n"
        "     h     hold'em\n"
        "     o     omaha/8\n"
        "     O     omaha high\n"
        "     r     razz\n"
        "     s     stud\n"
        "     e     stud/8\n"
        "     q     stud high/low no qualifier\n"
        "     d     draw high\n"
        "     l     lowball (A-5)\n"
        "     k     Kansas City lowball (2-7)\n"
        "     b     badugi\n"
        "     3     three-card poker\n"
        "\n"
        "   examples:\n"
        "       ps-eval acas\n"
        "       ps-eval AcAs Kh4d --board 5c8s9h\n"
        "       ps-eval AcAs Kh4d --board 5c8s9h\n"
        "       ps-eval --game l 7c5c4c3c2c\n"
        "       ps-eval --game k 7c5c4c3c2c\n"
        "       ps-eval --game kansas-city-lowball 7c5c4c3c2c\n"
        "\n"
        ;

    try 
    {
        // set up the program options, handle the help case, and extract the values
        po::options_description desc("Allowed options");
        desc.add_options()
            ("help,?",    "produce help message")
            ("game,g",    po::value<string>()->default_value("h"), "game to use for evaluation")
            ("board,b",   po::value<string>()->default_value(""),  "community cards for he/o/o8")
            ("hand,h",    po::value< vector<string> >(),           "a hand for evaluation")
            ("quiet,q",   "produce no output")
            ;

        po::positional_options_description p;
        p.add("hand", -1);
        po::variables_map vm;
        po::store (po::command_line_parser(argc, argv)
                   .style(po::command_line_style::unix_style)
                   .options(desc)
                   .positional(p)
                   .run(), vm);
        po::notify (vm);

        // check for help
        if (vm.count("help") || argc == 1)
        {
            cout << desc << extendedHelp << endl;
            return 1;
        }

        // extract the options
        EvalDriver driver(vm["game"].as<string>(),
                          vm["hand"].as< vector<string> >(),
                          vm["board"].as<string>());
        driver.evaluate();
        if (vm.count("quiet") == 0)
            cout << driver.str();
    }
    catch(std::exception& e) 
    {
        cerr << "-- caught exception--\n" << e.what() << "\n";
        return 1;
    }
    catch(...) 
    {
        cerr << "Exception of unknown type!\n";
        return 1;
    }
    return 0;
}
1
задан 13 April 2017 в 15:23

1 ответ

Не удивительно, что существуют трудности. Авторы не предоставили сценарии установки.

Так, мы должны определить заголовок и местоположения библиотеки вручную:

g++ -o programma ggg.cpp -I/home/girts/pokerstove/src/lib -l{peval,penum} -L/home/girts/pokerstove/src/build/lib/pokerstove/{peval,penum}

И существует ошибка в коде ggg.cpp, я думаю: CardSet не может быть создан с двумя картами как этот.

Пример, который компилирует:

#include <iostream>
#include <pokerstove/peval/CardSet.h>
#include <pokerstove/peval/Card.h>

using pokerstove::CardSet;
using pokerstove::Card;
using pokerstove::Rank;
using pokerstove::Suit;

int main(void)
{
    CardSet big_slick(Card(Rank('A'),Suit('s')));
    std::cout << big_slick.str() << std::endl;

    CardSet dead_mans_hand("AcAs8d8hJs");
    std::cout << dead_mans_hand.str() << std::endl;
}
2
ответ дан 7 December 2019 в 13:59

Другие вопросы по тегам:

Похожие вопросы: