Я пытался включать эту 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" (конечно, который не был мной действительно) на самом деле заставил его работать. Вот мои предыдущие вопросы:
Тем не менее я смог скомпилировать .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;
}
Не удивительно, что существуют трудности. Авторы не предоставили сценарии установки.
Так, мы должны определить заголовок и местоположения библиотеки вручную:
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;
}