{"id":275509,"date":"2016-03-04T14:56:02","date_gmt":"2016-03-04T11:56:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=275509"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=275509","title":{"rendered":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Chromium \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 SDK \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439"},"content":{"rendered":"<p>       \u041f\u043e\u043c\u0438\u043c\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/www.chromium.org\/developers\/how-tos\">Chromium Wiki<\/a>), \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 Chromium (<a href=\"https:\/\/habrahabr.ru\/post\/165193\/\">\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/a>).<\/p>\n<p>  \u042f \u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C++, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"http:\/\/www.qt.io\">Qt<\/a> \u0438 <a href=\"http:\/\/www.boost.org\/\">boost<\/a>. \u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0443 &#8216;\u043d\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&#8217;, \u0432\u0435\u0434\u044c \u043d\u0438\u043a\u0442\u043e \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u0434 Chromium \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e.<br \/>  \u0412\u0435\u0434\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 Chromium \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u0442\u0430\u043a \u0438 \u0432\u0441\u0435<br \/>  \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u0430\u043a <a href=\"https:\/\/boringssl.googlesource.com\/boringssl\/\">boringssl<\/a>, <a href=\"https:\/\/www.ffmpeg.org\">ffmpeg<\/a>, <a href=\"http:\/\/www.freetype.org\">freetype2<\/a>, <a href=\"https:\/\/hunspell.github.io\">hunspell<\/a>, <a href=\"http:\/\/site.icu-project.org\">ICU<\/a>, <a href=\"https:\/\/github.com\/open-source-parsers\/jsoncpp\">jsoncpp<\/a>, <a href=\"http:\/\/libjpeg.sourceforge.net\">libjpeg<\/a>, libxml, <a href=\"http:\/\/www.openh264.org\">openh264<\/a>, <a href=\"https:\/\/developers.google.com\/protocol-buffers\/\">protobuf<\/a>, <a href=\"https:\/\/github.com\/google\/googletest\">gtest<\/a>, <a href=\"https:\/\/www.sqlite.org\">sqlite<\/a> \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, <a href=\"https:\/\/developers.google.com\/v8\/\">v8<\/a>, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Chromium \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0441\u0442\u0440\u043e\u043a\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435), \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0435\u0442\u044c\u044e \u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 3D, IPC, UI \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0438 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0449\u0435. \u0412\u0441\u0435 \u044d\u0442\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c (\u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u044b\u043c) \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f performance \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u0447\u0443, \u044f \u043d\u0435 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043b\u044e\u0431\u043e\u0439 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0439 \u0432\u0430\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442 \u0432\u0430\u0448\u0443 \u043a\u0430\u0440\u043c\u0443. \u041d\u0435\u0442, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0438 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043e \u0442\u043e\u043c, \u0438\u0437 \u0447\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u0430\u043a \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0437 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/\">\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Chromium<\/a>.<br \/>  \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u0435\u0442\u044c\u044e, \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, UI \u0438 \u043f\u0440\u043e\u0447\u0438\u043c. \u042d\u0442\u043e \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u0438\u043c\u0435\u044e\u0449\u0435\u043c\u0443\u0441\u044f API \u0432 Chromium, \u0441\u043a\u043e\u0440\u0435\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0449\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435.<br \/>  \u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0447\u0430\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c, \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u042d\u0442\u043e \u0432\u0441\u0451 \u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API.<\/p>\n<p>  \u041d\u0435 \u0441\u0442\u0430\u043d\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c. \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c depot_tools \u0432 \u043d\u0430\u0448\u0435\u043c $PATH (\u043d\u0443\u0436\u043d\u044b \u0443\u0442\u0438\u043b\u0438\u0442\u044b gn \u0438 ninja), \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0438 \u0433\u043e\u0442\u043e\u0432 \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 chromium\/. \u0421\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Chromium \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 chromium\/src \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, sample_app \u0438 sample_app\/src.<br \/>  \u0412 sample_app\/src \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u0432\u0441\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 chromium\/src\/sample_app.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app.git\">https:\/\/github.com\/dreamer-dead\/chromium-sample-app.git<\/a><\/p>\n<pre><code class=\"bash\">$ pwd \/Users\/username\/chromium\/src  $ git clone https:\/\/github.com\/dreamer-dead\/chromium-sample-app.git sample_app  $ cd sample_app\/<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/470736619faaba62561d552b16665fdb69a0fe5a\/src\/sample_app.cc\">src\/sample_app.cc<\/a><\/p>\n<pre><code>int main() {   return 0; }<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/8248c8550ea99887b555776c1c4a4e1da91259bd\/src\/BUILD.gn\">src\/BUILD.gn<\/a><\/p>\n<pre><code># SampleApp  executable(&quot;sample_app&quot;) {   output_name = &quot;sample_app&quot;   sources = [     &quot;sample_app.cc&quot;,   ] }<\/code><\/pre>\n<p>  Chromium \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u0430\u043a <a href=\"https:\/\/gyp.gsrc.io\">GYP<\/a> \u0438 <a href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/tools\/gn\/\">GN<\/a> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ninja-build.org\">ninja<\/a>-\u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u044d\u0442\u0430\u043f\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. GN \u2014 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 ninja-\u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u043d \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 GYP, \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0421++ \u0432\u043c\u0435\u0441\u0442\u043e Python, \u0438 \u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0431\u043e\u043b\u0435\u0435 \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u0435\u043d \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e, \u0445\u043e\u0442\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 Chromium \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0441 GYP \u0442\u043e\u0436\u0435.<\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u043c \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433\u0435 sample_app\/src\/BUILD.gn \u0437\u0430\u0434\u0430\u0451\u043c \u0438\u043c\u044f \u0442\u0430\u0440\u0433\u0435\u0442\u0430, \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043d\u0435 \u0442\u0430\u043a \u043b\u0438?<br \/>  \u0425\u043e\u0442\u044f \u0432\u0441\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0445\u043e\u0442\u044c CMake, \u0445\u043e\u0442\u044c Makefile.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b GN \u0443\u0432\u0438\u0434\u0435\u043b \u043a\u043e\u043d\u0444\u0438\u0433 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u0435 chromium\/src\/BUILD.gn, \u043d\u0430\u043b\u043e\u0436\u0438\u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0442\u0447<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Diff \u0434\u043b\u044f \u043f\u0430\u0442\u0447\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e BUILD.gn<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/436cd3beadcf4bfd82c9c174eebe6d95310b809b\/src\/root_BUILD_gn.patch\">src\/root_BUILD_gn.patch<\/a><\/p>\n<pre><code class=\"diff\">diff --git a\/BUILD.gn b\/BUILD.gn index 0fa2013..729157d 100644 --- a\/BUILD.gn +++ b\/BUILD.gn @@ -906,3 +906,7 @@ template(&quot;assert_valid_out_dir&quot;) {  assert_valid_out_dir(&quot;_unused&quot;) {    actual_sources = [ &quot;$root_build_dir\/foo&quot; ]  } + +group(&quot;sample_app&quot;) { +  deps = [ &quot;\/\/sample_app\/src:sample_app&quot; ] +}<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0435\u043a\u0430\u0443\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code class=\"bash\">$ (cd .. &amp;&amp; git apply sample_app\/src\/root_BUILD_gn.patch)<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0430\u0440\u0433\u0435\u0442\u0430 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"bash\">$ gn gen --args=is_debug=true --root=..\/ ..\/out\/gn $ ninja -C ..\/out\/gn sample_app<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c ninja-\u0444\u0430\u0439\u043b\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 chromium\/src\/out\/gn\/ \u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 chromium\/src\/<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0421++.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/e31fbf4874aab00e0bdcd0f2a1c98b576f0845be\/src\/sample_app.cc\">src\/sample_app.cc<\/a><\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;string&gt;  int main(int argc, const char* argv[]) {   std::cout &lt;&lt; &quot;Hello from SampleApp!&quot; &lt;&lt; std::endl;    return 0; }<\/code><\/pre>\n<p>  \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435:<\/p>\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app $ ..\/out\/gn\/sample_app Hello from SampleApp!<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430. Chromium \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 C++, std::basic_string&lt;&gt;, \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f UTF16 \u0441\u0442\u0440\u043e\u043a\u0438(<a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/strings\/string16.h&amp;amp;q=base::string16&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=135\">base::string16<\/a>, \u044d\u0442\u043e typedef \u0434\u043b\u044f std::basic_string) \u0438 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 string-view \u043a\u043b\u0430\u0441\u0441 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/strings\/string_piece.h&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=163\">base::StringPiece<\/a>.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/bc6516173752fc9959fabbba54aedf99e330b417\/src\/sample_app.cc\">src\/sample_app.cc<\/a><\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;string&gt;  #include &quot;base\/strings\/utf_string_conversions.h&quot;  namespace {  void StringsSample() {   std::cout &lt;&lt; base::WideToUTF8(L&quot;This is a wide string.&quot;) &lt;&lt; std::endl;   std::wcout &lt;&lt; base::UTF8ToWide(&quot;This is an UTF8 string.&quot;) &lt;&lt; std::endl;   std::cout &lt;&lt; base::UTF16ToUTF8(base::UTF8ToUTF16(                    &quot;This is an UTF8 string converted to UTF16 and back.&quot;))             &lt;&lt; std::endl; }  }  \/\/ namespace  int main(int argc, const char* argv[]) {   std::cout &lt;&lt; &quot;Hello from SampleApp!&quot; &lt;&lt; std::endl;    StringsSample();    return 0; }<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/commit\/bc6516173752fc9959fabbba54aedf99e330b417#diff-7fc9ebc5fb238c78f890e8cf2900368c\">src\/BUILD.gn<\/a><\/p>\n<pre><code>executable(&quot;sample_app&quot;) {   output_name = &quot;sample_app&quot;   sources = [     &quot;sample_app.cc&quot;,   ]    deps = [     &quot;\/\/base&quot;   ] }<\/code><\/pre>\n<p>  \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0442\u0430\u0440\u0433\u0435\u0442\u0430 <code>\/\/base<\/code> \u0432 BUILD.gn \u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, \u0437\u0430 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"http:\/\/site.icu-project.org\">ICU<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430\u043c \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f,<\/p>\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app<\/code><\/pre>\n<p>  Ninja \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 .gn \u043a\u043e\u043d\u0444\u0438\u0433\u0430.<\/p>\n<p>  \u041e\u0442 \u0441\u0442\u0440\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0443.<br \/>  \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0438\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 src\/base \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u0434 \u0442\u0435 \u043d\u0443\u0436\u0434\u044b, \u0447\u0442\u043e \u0431\u044b\u043b\u0438 \u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Chromium. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043d\u0435\u0442, \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/abe4f337014d45eb758b568c8fa1d1f5c09abd14\/src\/sample_app.cc\">src\/sample_app.cc<\/a><\/p>\n<pre><code>#include &quot;base\/command_line.h&quot; #include &quot;base\/files\/file_path.h&quot; #include &quot;base\/logging.h&quot;  void CommandLineSample() {   using base::CommandLine;    DCHECK(CommandLine::ForCurrentProcess())       &lt;&lt; &quot;Command line for process wasn't initialized.&quot;;    const CommandLine&amp; command_line = *CommandLine::ForCurrentProcess();    std::cout &lt;&lt; &quot;Application program name is &quot;             &lt;&lt; command_line.GetProgram().AsUTF8Unsafe() &lt;&lt; std::endl;    if (command_line.HasSwitch(&quot;bool-switch&quot;)) {     std::cout &lt;&lt; &quot;Detected a boolean switch!&quot; &lt;&lt; std::endl;   }    std::string string_switch = command_line.GetSwitchValueASCII(&quot;string-switch&quot;);   if (!string_switch.empty()) {     std::cout &lt;&lt; &quot;Got a string switch value: &quot; &lt;&lt; string_switch &lt;&lt; std::endl;   } }  int main(int argc, const char* argv[]) {   CHECK(base::CommandLine::Init(argc, argv))       &lt;&lt; &quot;Failed to parse a command line argument.&quot;;    std::cout &lt;&lt; &quot;Hello from SampleApp!&quot; &lt;&lt; std::endl;    StringsSample();   CommandLineSample();    return 0; }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app $ ..\/out\/gn\/sample_app --bool-switch --string-switch=SOME_VALUE Hello from SampleApp! This is a wide string. This is an UTF8 string. This is an UTF8 string converted to UTF16 and back. Application program name is ..\/out\/gn\/sample_app Detected a boolean switch! Got a string switch value: SOME_VALUE<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0435\u0439 \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u043b\u043e\u0433\u0433\u0438\u043d\u0433\u0430. \u0422\u0430\u043a, \u0432\u044b\u0437\u043e\u0432 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/logging.h&amp;amp;q=CHECK&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=476\">CHECK()<\/a> \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/command_line.h&amp;amp;q=CommandLine::Init&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=80\">CommandLine::Init<\/a> \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0432 \u043b\u043e\u0433 \u0441\u0442\u0440\u043e\u043a\u0443 &quot;Failed to parse a command line argument.&quot; \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 <code>operator &lt;&lt;<\/code> \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/logging.h&amp;amp;q=DCHECK&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=663\">DCHECK (debug check)<\/a> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0440\u0435\u043b\u0438\u0437\u0435.<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043b\u043e\u0433\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/commit\/8f1177e5380385c86bdbc7d17417c3291ecf5a34\">src\/sample_app.cc<\/a><\/p>\n<pre><code>void LoggingSample() {   logging::LoggingSettings settings;    \/\/ Set log to STDERR on POSIX or to OutputDebugString on Windows.   settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;   CHECK(logging::InitLogging(settings));    \/\/ Log messages visible by default.   LOG(INFO) &lt;&lt; &quot;This is INFO log message.&quot;;   LOG(WARNING) &lt;&lt; &quot;This is WARNING log message.&quot;;    \/\/ Verbose log messages, disabled by default.   VLOG(1) &lt;&lt; &quot;This is a log message with verbosity == 1&quot;;   VLOG(2) &lt;&lt; &quot;This is a log message with verbosity == 2&quot;;    \/\/ Verbose messages, can be enabled only in debug build.   DVLOG(1) &lt;&lt; &quot;This is a DEBUG log message with verbosity == 1&quot;;   DVLOG(2) &lt;&lt; &quot;This is a DEBUG log message with verbosity == 2&quot;;    \/\/ FATAL log message will terminate our app.   if (base::CommandLine::ForCurrentProcess()-&gt;HasSwitch(&quot;log-fatal&quot;)) {     LOG(FATAL) &lt;&lt; &quot;Program will terminate now!&quot;;   } }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 STDERR, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438.<br \/>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0443\u0440\u043e\u0432\u043d\u0435\u043c FATAL \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441, \u0435\u0441\u043b\u0438 \u0441\u043c\u043e\u0436\u0435\u0442.<br \/>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>LoggingSample()<\/code> \u0432 <code>main()<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 Mac OS X):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app $ ..\/out\/gn\/sample_app --v=2 --log-fatal Hello from SampleApp! This is a wide string. This is an UTF8 string. This is an UTF8 string converted to UTF16 and back. Application program name is ..\/out\/gn\/sample_app [0303\/202541:INFO:sample_app.cc(51)] This is INFO log message. [0303\/202541:WARNING:sample_app.cc(52)] This is WARNING log message. [0303\/202541:VERBOSE1:sample_app.cc(55)] This is a log message with verbosity == 1 [0303\/202541:VERBOSE2:sample_app.cc(56)] This is a log message with verbosity == 2 [0303\/202541:VERBOSE1:sample_app.cc(59)] This is a DEBUG log message with verbosity == 1 [0303\/202541:VERBOSE2:sample_app.cc(60)] This is a DEBUG log message with verbosity == 2 [0303\/202541:FATAL:sample_app.cc(64)] Program will terminate now! 0   sample_app                          0x000000010f276def _ZN4base5debug10StackTraceC2Ev + 47 1   sample_app                          0x000000010f276f93 _ZN4base5debug10StackTraceC1Ev + 35 2   sample_app                          0x000000010f2b53a0 _ZN7logging10LogMessageD2Ev + 80 3   sample_app                          0x000000010f2b2c43 _ZN7logging10LogMessageD1Ev + 35 4   sample_app                          0x000000010f235072 _ZN12_GLOBAL__N_113LoggingSampleEv + 1346 5   sample_app                          0x000000010f2342e0 main + 288 6   sample_app                          0x000000010f2341b4 start + 52 7   ???                                 0x0000000000000003 0x0 + 3  Trace\/BPT trap: 5  $ ..\/out\/gn\/sample_app Hello from SampleApp! This is a wide string. This is an UTF8 string. This is an UTF8 string converted to UTF16 and back. Application program name is ..\/out\/gn\/sample_app [0303\/203145:INFO:sample_app.cc(51)] This is INFO log message. [0303\/203145:WARNING:sample_app.cc(52)] This is WARNING log message.<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0436\u0435\u0441\u0442\u043a\u043e\u0435, \u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\/\u043a\u043b\u0430\u0441\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u0438\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u0430\u043c \u0441 \u043a\u043e\u0434\u043e\u043c. \u0422\u0430\u043a, \u043a\u043b\u0430\u0441\u0441 FilePath \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/files\/file_path.h&amp;amp;q=base\/files\/file_path.cc&amp;amp;sq=package:chromium&amp;amp;type=cs\">base\/files\/file_path.h<\/a>, \u0430 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/files\/file_path.cc&amp;amp;sq=package:chromium&amp;amp;type=cs\">base\/files\/file_path.cc<\/a>.<br \/>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u043e\u0434\u0443 \u0438 \u043f\u043e\u0438\u0441\u043a \u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/commit\/35fc08630869c08f4baa52fa5b3445212fc48926\">src\/sample_app.cc<\/a><\/p>\n<pre><code>#include &quot;base\/files\/file_enumerator.h&quot; #include &quot;base\/files\/file_util.h&quot;  void FilesSample() {   base::FilePath current_dir;   CHECK(base::GetCurrentDirectory(&amp;current_dir));    std::cout &lt;&lt; &quot;Enumerating files and directories in path: &quot;             &lt;&lt; current_dir.AsUTF8Unsafe() &lt;&lt; std::endl;    base::FileEnumerator file_enumerator(       current_dir, false,       base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES);   for (base::FilePath name = file_enumerator.Next(); !name.empty();        name = file_enumerator.Next()) {     std::cout &lt;&lt; (file_enumerator.GetInfo().IsDirectory()         ? &quot;[dir ] &quot;         : &quot;[file] &quot;) &lt;&lt; name.AsUTF8Unsafe() &lt;&lt; std::endl;   } }<\/code><\/pre>\n<p>  \u0418 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>main()<\/code>.<br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/code.google.com\/p\/chromium\/codesearch#chromium\/src\/base\/files\/file_enumerator.h&amp;amp;q=base::FileEnumerator&amp;amp;sq=package:chromium&amp;amp;type=cs&amp;amp;l=40\">base::FileEnumerator<\/a> \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430, \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0432\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app $ (cd src\/ &amp;&amp; ..\/..\/out\/gn\/sample_app) Hello from SampleApp! This is a wide string. This is an UTF8 string. This is an UTF8 string converted to UTF16 and back. Application program name is ..\/..\/out\/gn\/sample_app [0303\/203629:INFO:sample_app.cc(51)] This is INFO log message. [0303\/203629:WARNING:sample_app.cc(52)] This is WARNING log message. Enumerating files and directories in path: \/Users\/username\/chromium\/src\/sample_app\/src [file] \/Users\/username\/chromium\/src\/sample_app\/src\/BUILD.gn [file] \/Users\/username\/chromium\/src\/sample_app\/src\/sample_app.cc<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 main.cc, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0435\u0433\u043e API \u0432 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u0432 \u043d\u043e\u0432\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435, \u044d\u0442\u043e \u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c true \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u0444\u0430\u0439\u043b \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430\u0448\u0435\u0439 \u043d\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/2df12ea952450bd4ce06b93326574b3453bf6522\/src\/sample_api.h\">src\/sample_api.h<\/a><\/p>\n<pre><code>#ifndef SAMPLE_APP_SAMPLE_API_H_ #define SAMPLE_APP_SAMPLE_API_H_  namespace sample_api {  \/\/ Do some black magic. bool CallApiFunction();  }  \/\/ namespace sample_api  #endif  \/\/ SAMPLE_APP_SAMPLE_API_H_<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/2df12ea952450bd4ce06b93326574b3453bf6522\/src\/sample_api.cc\">src\/sample_api.cc<\/a><\/p>\n<pre><code>#include &quot;sample_app\/src\/sample_api.h&quot;  namespace sample_api {  bool CallApiFunction() {   return true; }  }  \/\/ namespace sample_api<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<br \/>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/c324b4a0e9fdf867f3be10d195f9d52e2cd1b4a8\/src\/sample_api_unittest.cc\">src\/sample_api_unittest.cc<\/a><\/p>\n<pre><code>#include &quot;sample_app\/src\/sample_api.h&quot;  #include &quot;testing\/gtest\/include\/gtest\/gtest.h&quot;  namespace sample_api {  namespace {  TEST(SampleApi, ApiFunctionTest) {   EXPECT_TRUE(CallApiFunction()); }  }  \/\/ namespace  }  \/\/ namespace sample_api<\/code><\/pre>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/blob\/c324b4a0e9fdf867f3be10d195f9d52e2cd1b4a8\/src\/BUILD.gn\">src\/BUILD.gn<\/a><\/p>\n<pre><code>import(&quot;\/\/testing\/test.gni&quot;)  executable(&quot;sample_app&quot;) {   output_name = &quot;sample_app&quot;   sources = [     &quot;sample_app.cc&quot;,     &quot;sample_api.cc&quot;,     &quot;sample_api.h&quot;,   ]    deps = [     &quot;\/\/base&quot;,   ] }  test(&quot;sample_app_unittests&quot;) {   sources = [     # TODO: Extract these API files as a library.     &quot;sample_api.cc&quot;,     &quot;sample_api.h&quot;,     &quot;sample_api_unittest.cc&quot;,   ]    deps = [     &quot;\/\/base\/test:run_all_unittests&quot;,     &quot;\/\/testing\/gtest&quot;,   ] }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 GTest \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c &quot;\/\/testing\/gtest&quot;, \u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0435\u0449\u0435 \u0438 &quot;\/\/base\/test:run_all_unittests&quot;. \u042d\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442 \u043d\u0430\u0441 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0437\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 src\/base\/test\/run_all_unittests.cc.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c ninja \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b:<\/p>\n<pre><code class=\"bash\">$ ninja -C ..\/out\/gn sample_app_unittests<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0442\u0435\u0441\u0442\u044b:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">$ ..\/out\/gn\/sample_app_unittests  IMPORTANT DEBUGGING NOTE: batches of tests are run inside their own process. For debugging a test inside a debugger, use the --gtest_filter=&lt;your_test_name&gt; flag along with --single-process-tests. Using sharding settings from environment. This is shard 0\/1 Using 8 parallel jobs. [1\/1] SampleApi.ApiFunctionTest (0 ms) SUCCESS: all tests passed. Tests took 0 seconds.<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0448\u043b\u0438!<br \/>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b, \u0430 \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e API \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app\/commit\/7d11c6f89810596fa3f855ae71c3f5838ab8cd92\">src\/sample_app.cc<\/a><\/p>\n<pre><code>#include &quot;sample_app\/src\/sample_api.h&quot;  void UseSampleAPI() {   if (sample_api::CallApiFunction()) {     std::cout &lt;&lt; &quot;Magick!&quot; &lt;&lt; std::endl;   } }<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e.<br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438, \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0440\u0430\u043f\u043e\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u043e\u0433 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0441 test coverage \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a 100%.<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0438\u043b\u0434-\u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439, \u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f<br \/>  \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0438 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e #ifdef \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435.<br \/>  \u0420\u0430\u0437\u0432\u0435 \u043d\u0435 \u0437\u0434\u043e\u0440\u043e\u0432\u043e?<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e<br \/>  \u043a\u043e\u0434\u0430 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (\u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435), \u0438\u043b\u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u044b\u0445<br \/>  \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u043e API \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043d\u0435\u0442.<br \/>  \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0436\u0438\u0432\u0430\u044f \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044c \u0438 \u0432 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<br \/>  \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u043e\u0447\u043b\u0438, \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a =)<\/p>\n<p>  \u0421\u0442\u0430\u0442\u044c\u044f \u0438 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0434\u043b\u0438\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435.<br \/>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438!<\/p>\n<h6>\u0421\u0441\u044b\u043b\u043a\u0438<\/h6>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/www.chromium.org\/developers\/how-tos\">Chromium Dev How-To<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/post\/165193\/\">\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u041dabrahabr \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c Chromium<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dreamer-dead\/chromium-sample-app.git\">\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043a\u043e\u0434\u043e\u043c \u0441\u0442\u0430\u0442\u044c\u0438<\/a>  <\/li>\n<\/ul>\n<p>                 <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/278579\/\"> https:\/\/habrahabr.ru\/post\/278579\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041f\u043e\u043c\u0438\u043c\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/www.chromium.org\/developers\/how-tos\">Chromium Wiki<\/a>), \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 Chromium (<a href=\"https:\/\/habrahabr.ru\/post\/165193\/\">\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/a>).<\/p>\n<p>  \u042f \u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C++, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"http:\/\/www.qt.io\">Qt<\/a> \u0438 <a href=\"http:\/\/www.boost.org\/\">boost<\/a>. \u041d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0443 &#8216;\u043d\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435&#8217;, \u0432\u0435\u0434\u044c \u043d\u0438\u043a\u0442\u043e \u0432\u0441\u0435\u0440\u044c\u0435\u0437 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u0434 Chromium \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-275509","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=275509"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/275509\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=275509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=275509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=275509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}