You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Chromium GN工具创建独立及依赖Chromium子项目的工程?

我之前也碰到过这个gn.py: Could not find checkout in any parent of the current path错误,本质是depot_tools里的GN脚本默认会向上遍历目录寻找Chromium仓库的根目录(带.git标识的目录),下面分两种场景给你详细解决:

1. 创建完全独立的HelloWorld GN工程

这种场景下不需要依赖任何Chromium代码,只需要用GN做简单的C++构建,步骤如下:

  • 新建一个空目录并进入:

    mkdir hello_gn && cd hello_gn
    
  • 编写源文件hello.cc:

    #include <iostream>
    
    int main() {
        std::cout << "Hello World from GN!" << std::endl;
        return 0;
    }
    
  • 编写GN构建配置文件BUILD.gn:

    executable("hello") {
      sources = [ "hello.cc" ]
      # 可选:指定C++标准,比如C++17
      cflags_cc = [ "-std=c++17" ]
    }
    
  • 生成构建目录,关键是加上--no-checkout参数,告诉GN不要寻找Chromium仓库:

    gn gen --no-checkout out/Default
    
  • 用ninja构建并运行:

    ninja -C out/Default hello
    ./out/Default/hello
    

运行后就能看到"Hello World from GN!"的输出了,这个工程完全独立,和Chromium没有任何关联。

2. 创建依赖Chromium子项目(以pdfium为例)的GN工程

如果要依赖pdfium、v8这类Chromium子项目,必须先拥有完整的Chromium代码 checkout,步骤如下:

  • 首先用depot_tools同步Chromium代码(会自动包含pdfium等子项目):

    mkdir chromium_checkout && cd chromium_checkout
    fetch chromium
    cd src
    
  • 在src目录下新建你的工程目录,比如pdf_page_counter并进入:

    mkdir pdf_page_counter && cd pdf_page_counter
    
  • 编写调用pdfium的源文件pdf_counter.cc:

    #include <iostream>
    #include "pdfium/fpdfview.h"
    
    int main(int argc, char* argv[]) {
        if (argc != 2) {
            std::cerr << "Usage: " << argv[0] << " <pdf_file>" << std::endl;
            return 1;
        }
    
        // 初始化PDFium库
        FPDF_InitLibrary();
    
        // 加载目标PDF文件
        FPDF_DOCUMENT doc = FPDF_LoadDocument(argv[1], nullptr);
        if (!doc) {
            std::cerr << "Failed to load PDF file!" << std::endl;
            FPDF_DestroyLibrary();
            return 1;
        }
    
        // 获取PDF页数
        int page_count = FPDF_GetPageCount(doc);
        std::cout << "PDF page count: " << page_count << std::endl;
    
        // 清理资源
        FPDF_CloseDocument(doc);
        FPDF_DestroyLibrary();
    
        return 0;
    }
    
  • 编写GN构建配置文件BUILD.gn,指定依赖pdfium:

    executable("pdf_page_counter") {
      sources = [ "pdf_counter.cc" ]
      // 依赖Chromium的pdfium库目标
      deps = [ "//third_party/pdfium:pdfium" ]
      cflags_cc = [ "-std=c++17" ]
    }
    
  • 回到src目录,生成构建目录(此时GN会自动识别Chromium仓库根目录,不会报错):

    cd ../
    gn gen out/Default
    
  • 用ninja构建你的目标并测试:

    ninja -C out/Default pdf_page_counter
    ./out/Default/pdf_page_counter your_test.pdf
    

这样就能得到一个可以读取PDF页数的控制台程序,其他Chromium子项目(比如v8)的依赖方式类似,只需要修改BUILD.gn里的deps路径即可。

内容的提问来源于stack exchange,提问作者Centny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:14:10