快捷搜索: 王者荣耀 脱发

google构建工具gn 一入门

gn工具下载

gn文档帮助

gn入门例子

根目录下.gn文件,指定gn配置文件

buildconfig = "//gnconfig/BUILDCONFIG.gn"

根目录下gnconfig文件夹BUILDCONFIG.gn,指定工具链

set_default_toolchain("//gnconfig/toolchain:gcc")

cflags_cc = [ "-std=c++11" ]

根目录下gnconfig/toolchain文件夹BUILD.gn,指定具体平台工具

# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

toolchain("gcc") {
  tool("cc") {
    depfile = "{
         
  {output}}.d"
    command = "gcc -MMD -MF $depfile {
         
  {defines}} {
         
  {include_dirs}} {
         
  {cflags}} {
         
  {cflags_c}} -c {
         
  {source}} -o {
         
  {output}}"
    depsformat = "gcc"
    description = "CC {
         
  {output}}"
    outputs = [
      "{
         
  {source_out_dir}}/{
         
  {target_output_name}}.{
         
  {source_name_part}}.o",
    ]
  }

  tool("cxx") {
    depfile = "{
         
  {output}}.d"
    command = "g++ -MMD -MF $depfile {
         
  {defines}} {
         
  {include_dirs}} {
         
  {cflags}} {
         
  {cflags_cc}} -c {
         
  {source}} -o {
         
  {output}}"
    depsformat = "gcc"
    description = "CXX {
         
  {output}}"
    outputs = [
      "{
         
  {source_out_dir}}/{
         
  {target_output_name}}.{
         
  {source_name_part}}.o",
    ]
  }

  tool("alink") {
    rspfile = "{
         
  {output}}.rsp"
    command = "rm -f {
         
  {output}} && ar rcs {
         
  {output}} @$rspfile"
    description = "AR {
         
  {target_output_name}}{
         
  {output_extension}}"
    rspfile_content = "{
         
  {inputs}}"
    outputs = [
      "{
         
  {target_out_dir}}/{
         
  {target_output_name}}{
         
  {output_extension}}",
    ]
    default_output_extension = ".a"
    output_prefix = "lib"
  }

  tool("solink") {
    soname = "{
         
  {target_output_name}}{
         
  {output_extension}}"  # e.g. "libfoo.so".
    sofile = "{
         
  {output_dir}}/$soname"
    rspfile = soname + ".rsp"

    command = "g++ -shared {
         
  {ldflags}} -o $sofile -Wl,-soname=$soname @$rspfile"
    rspfile_content = "-Wl,--whole-archive {
         
  {inputs}} {
         
  {solibs}} -Wl,--no-whole-archive {
         
  {libs}}"

    description = "SOLINK $soname"

    # Use this for {
         
  {output_extension}} expansions unless a target manually
    # overrides it (in which case {
         
  {output_extension}} will be what the target
    # specifies).
    default_output_extension = ".so"

    # Use this for {
         
  {output_dir}} expansions unless a target manually overrides
    # it (in which case {
         
  {output_dir}} will be what the target specifies).
    default_output_dir = "{
         
  {root_out_dir}}"

    outputs = [
      sofile,
    ]
    link_output = sofile
    depend_output = sofile
    output_prefix = "lib"
  }

  tool("link") {
    outfile = "{
         
  {target_output_name}}{
         
  {output_extension}}"
    rspfile = "$outfile.rsp"
    command = "g++ {
         
  {ldflags}} -o $outfile @$rspfile {
         
  {solibs}} {
         
  {libs}}"
    description = "LINK $outfile"
    default_output_dir = "{
         
  {root_out_dir}}"
    rspfile_content = "{
         
  {inputs}}"
    outputs = [
      outfile,
    ]
  }

  tool("stamp") {
    command = "touch {
         
  {output}}"
    description = "STAMP {
         
  {output}}"
  }

  tool("copy") {
    command = "cp -af {
         
  {source}} {
         
  {output}}"
    description = "COPY {
         
  {source}} {
         
  {output}}"
  }
}

根目录BUILD.gn

group("default"){
  deps = [
    "//src:hello",
  ]
}

根目录下src文件夹BUILD.gn

executable("hello") {
  sources = [
    "hello.cpp",
  ]
}

根目录下src文件夹hello.cpp

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
	cout << "main - start ... " << endl;
	return 0;
}
经验分享 程序员 微信小程序 职场和发展