C ++ V8嵌入项目结构

时间:2018-11-19 16:40:12

标签: c++ google-chrome embed v8

我正在尝试将chrome V8嵌入我的C ++项目中,但我只能得到我所称的东西,我的项目已嵌入V8中。我对此唯一担心的是我的程序是跨平台的,并且我希望构建命令是相同的。我开始在Windows上进行开发,但是现在使用Mac来运行V8。

我可以使用此设置来构建V8并运行其示例:

我当前的解决方案有一些命令installbuildrun。 build命令更加复杂,因为它试图自动编辑V8中的BUILD.gn文件以插入项目而不是V8。它将源目录中的所有文件添加到源中。

由于某些原因,这种方法感觉很错误。首先,几乎肯定有比使用python脚本编辑构建脚本更好的配置项目的方法。其次,我希望将V8嵌入到我的项目中,而不是相反。我只有SDL2作为依赖项,但是我拥有跨平台的CMake构建设置,但是V8构建源文件会放弃该设置。我觉得如果添加更多依赖项,这种方法可能会变得难以管理。

我目前正在处理一个带有一个源文件的小型测试项目。

编辑:我在运行示例和API使用之间嵌入V8找不到任何东西

2 个答案:

答案 0 :(得分:0)

通常的方法是在构建系统中迈出一步,将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感觉不对。随着时间的流逝,它也可能变得脆弱且需要大量维护。

答案 1 :(得分:0)

我使用brew可以很容易地用CMake构建V8:

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})

致力于Mojave 10.14.1