前言
chromium中有一个入门文档,叫cpp101
http://www.chromium.org/developers/cpp-in-chromium-101-codelab
已经放假了:)
将这个入门实验做一遍, 可以从编译选项到c++概念在chromium的用法搞清楚。然后再继续膜拜chromium工程本身。
实验
BUILD.gn
修改Z:\chromium\src\base\BUILD.gn, 在此配置文件尾部加入cpp101的工程依赖.
这个实验依赖的库是base
# TODO(dyaroshev): remove regression fuzzer, after we run it for a few days
# and are confident that the transition was ok.
fuzzer_test("utf_string_conversions_regression_fuzzer") {
sources = [
"strings/old_utf_string_conversions.cc",
"strings/old_utf_string_conversions.h",
"strings/utf_string_conversions_regression_fuzzer.cc",
]
deps = [
":base",
]
libfuzzer_options = [ "max_len=32" ]
}
executable("hello_chromium") {
sources = [
"cpp101/hello_chromium.cpp",
]
deps = [
":base",
]
}
args.gn
为了使命令行编译时,少指定一些参数,可以将参数放在输出目录的args.gn中。
# @file Z:\chromium\src\out\cpp101\args.gn
# @brief build chromium cpp101
# @ref https://www.chromium.org/developers/gn-build-configuration
# https://blog.csdn.net/Vincent95/article/details/78477822
# @note
# cd /d Z:\chromium\src\
# gn --ide=vs args out\cpp101
# autoninja -C out\cpp101 hello_chromium
# cd /d Z:\chromium\src\out\cpp101
# hello_chromium.exe
#
# args.gn begin
#
target_os="win"
target_cpu = "x86"
is_component_build = true
dcheck_always_on = true
enable_nacl = false
use_goma = false
symbol_level = 2
is_debug = true
is_win_fastlink = false
remove_webcore_debug_symbols = false
#
# args.gn end
#
hello_chromium.cpp
随便写个测试代码,用到base库中的特性就行。
// @file Z:\chromium\src\base\cpp101\hello_chromium.cpp
// @brief
// Example GN solution for C++ 101 Exercise 0 (Hello world).
#include <stdlib.h>
#include <stdio.h>
#include "base/logging.h"
int main(int argc, char** argv)
{
printf("hello chromium\n");
LOG(INFO) << "hello chromium";
return EXIT_SUCCESS;
}
编译运行工程
cd /d Z:\chromium\src\
gn --ide=vs args out\cpp101
autoninja -C out\cpp101 hello_chromium
运行工程
cd /d Z:\chromium\src\out\cpp101
hello_chromium.exe
看工程的运行效果
在exe同级目录中有log, 我将日志名字改成debug.log了.
查看debug.log的内容
[0117/111053.297:INFO:hello_chromium.cpp(18)] hello chromium
备注
脱离chromium主工程做实验的意义:
- 可以写自己的独立工程,可以直接用chromium基础库(性能,跨平台都有了)。只用考虑逻辑就行。