Задать вопрос
@Rastr_0

Как подключить htmlcxx в проект C++?

Нашел интересующую библиотеку: htmlcxx. Только не могу понять как ее подключить в проект.
Она, как я понял, не header-only, поэтому просто прописать include не работает. В Интернете тоже ничего не нашел по подключению. Качал из ее репозитория.
  • Вопрос задан
  • 205 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@majstar_Zubr
C++, C#, gamedev
В данном случае, библиотека распространяется как набор файлов, и если будете собирать через Msbuild, проще всего добавить все файлы библиотеки в текущий проект напрямую. Или же оформить сборку отдельным проектом vcproj библиотеки в том же solution.

UPDATED:

Кажется либа еще не доработана, т.к. в доках не указана явно сборка под Win.

1) В подобных случаях в первую очередь нужно искать и просмотреть в архиве все текстовые файлы, которые названы без расширения. В данном случае, в архиве уже есть проектные файлы для сборки через visual studio. Для сборки потребуется сделать только solution.
2) Создаете новый solution c запуском без кода или через открытие в проводнике на одном из проектов. В ПКМ контекстном меню solution в Solution Explorer добавляете второй проект в solution.
3) Собираете проект htmlcxx.vcxproj в двух конфигурациях. Если ничего не менять при импорте - это проект статической библиотеки.
4) Чтобы собрать проект простым CLI (htmlcxxapp.vcxproj) нужно добавить папки, куда собиралась либа - свойства проекта - Linker - Additional include directories. Если создался sln через импорт проекта, то sln создастся в той же папке, что и проекты, и по умолчанию путь для сборки можно задать так $(ProjectDir)$(Configuration)
5) Linker - Additional Dependencies перед %(AdditionalDependencies) можно просто добавить htmlcxx.lib; для всех конфигураций, т.к. в дебаге либа собирается под тем же именем.
6) после этого все соберется. Но работать под Win css парсинг не будет.
Потому что
#ifdef WIN32
		if(parse_css)
		{
			cerr << "Css parsing not supported in win32" << endl;
			return 1;
		}
		return 0;
#else


Но , тут уже надо разбираться, почему нельзя просто так взять и собрать под win, и дорабатывать либу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
borisdenis
@borisdenis
Ленив и вреден...
По вашей ссылке можно найти пример использования:
Using htmlcxx is quite simple. Take a look
at this example.

-----------------------------------------------------------------------


#include <htmlcxx/html/ParserDom.h>
  ...
  using namespace std;
  using namespace htmlcxx;

  //Parse some html code
  string html = "<html><body>hey</body></html>";
  HTML::ParserDom parser;
  tree<HTML::Node> dom = parser.parseTree(html);

  //Print whole DOM tree
  cout << dom << endl;

  //Dump all links in the tree
  tree<HTML::Node>::iterator it = dom.begin();
  tree<HTML::Node>::iterator end = dom.end();
  for (; it != end; ++it)
  {
     if (strcasecmp(it->tagName().c_str(), "A") == 0)
     {
       it->parseAttributes();
       cout << it->attribute("href").second << endl;
     }
  }

  //Dump all text of the document
  it = dom.begin();
  end = dom.end();
  for (; it != end; ++it)
  {
    if ((!it->isTag()) && (!it->isComment()))
    {
      cout << it->text();
    }
  }
  cout << endl;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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