C ++ V8 Встраивание структуры проекта - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь встроить Chrome V8 в мой проект C ++, и я могу получить только то, что могу назвать, мой проект встроен в V8. Меня беспокоит только то, что моя программа кроссплатформенная, и я хотел бы, чтобы команды сборки были такими же. Я начал разработку под Windows, но сейчас я использую Mac для запуска V8.

Я могу получить V8 и запустить их образцы, используя эту настройку:

В моем текущем решении есть несколько команд install, build, run. Команда build более сложна, так как она пытается автоматически отредактировать файл BUILD.gn в V8, чтобы вставить ваш проект вместо V8. Он добавит все файлы из вашего исходного каталога в исходники.

Этот подход кажется очень неправильным по нескольким причинам. Во-первых, почти наверняка есть лучший способ настроить мой проект, чем редактирование сценария сборки с помощью сценария Python. Во-вторых, я бы хотел, чтобы V8 был встроен в мой проект, а не наоборот. У меня есть только SDL2 в качестве зависимости, но у меня есть кроссплатформенная настройка сборок CMake, от которой отказались бы, хотя V8 собирает исходные файлы. Я чувствую, что таким способом будет сложно управлять, если я добавлю больше зависимостей.

В настоящее время я работаю с небольшим тестовым проектом с одним исходным файлом.

РЕДАКТИРОВАТЬ: Я не могу найти что-то о встраивании V8 между запуском образца и использованием API

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я получил V8 build с CMake очень легко, используя brew:

brew install v8

затем добавьте следующие строки в CMakeLists.txt

file(GLOB_RECURSE V8_LIB # just GLOB is probably fine
    "/usr/local/opt/v8/lib/*.dylib"
)
include_directories(
    YOUR_INCLUDES
    /usr/local/opt/v8
    /usr/local/opt/v8/include
)
target_link_libraries(YOUR_PROJECT LINK_PUBLIC YOUR_LIBS ${V8_LIB})

Работал на Мохаве 10.14.1

0 голосов
/ 19 ноября 2018

Обычный подход состоит в том, чтобы в вашей системе сборки был шаг, который собирает библиотеку V8 как зависимость (а также любые другие зависимости, которые у вас могут быть). Для этого следует использовать официальные инструкции по сборке V8. Если у вас есть разделение между шагами для получения источников / зависимостей и их компиляции, тогда получение depot_tools и вызов fetch_v8 / gclient sync относятся именно туда. Обратите внимание, что вы, вероятно, хотите закрепить версию (последнюю стабильную ветвь), а не использовать верхушку дерева. Итак, в псевдокоде у вас будет что-то вроде:

step get_dependencies:
  download/update depot_tools
  download/update V8 @ pinned_revision (using depot_tools)

step compile (depends on "get_dependencies"):
  cd v8; gn args out/...; ninja -C out/...;
  cd sdl; build sdl
  build your own code, linking against V8/sdl/other deps.

Многие системы сборки уже имеют удобные способы сделать это. Я не очень хорошо знаю CMake, поэтому не могу предложить что-то конкретное там.

Я согласен, что использование сценариев для автоматического изменения BUILD.gn кажется неправильным. Вероятно, со временем он также станет хрупким и требует повышенного технического обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...