{"id":383428,"date":"2024-06-29T04:54:22","date_gmt":"2024-06-29T04:54:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=383428"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=383428","title":{"rendered":"<span>\u041f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c QtTest \u0441 GCOV\/LCOV \u0434\u043b\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 QBS<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438 \u0432\u0441\u0435 \u043a\u0442\u043e \u0438\u043c \u0441\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442. \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <em>QBS<\/em> \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 <em>Qt<\/em> \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b <em>QtTest<\/em> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442 <em>gcov\/lcov<\/em>. \u041a\u043e\u043c\u0443 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0442.  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d &#171;\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430&#187;. \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 (\u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 <em>\u041f\u041e<\/em>) \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e. <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e, \u044d\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u043c) \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 (\u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b). <\/p>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u0432\u0435\u0442\u0432\u0435\u0439 \u043a\u043e\u0434\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0432\u0435\u0442\u0432\u0435\u0439.<\/p>\n<h2>\u0427\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/h2>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0434\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 &#171;\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f&#187; \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 <em>\u041f\u041e<\/em> (\u0442.\u043a. \u043c\u044b \u0432\u0441\u0435 \u0432 \u0434\u0443\u0448\u0435 \u043b\u0435\u043d\u0442\u044f\u0438):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0427\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435<\/p>\n<\/td>\n<td>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux\" rel=\"noopener noreferrer nofollow\">GNU\/Linux<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/gcc.gnu.org\/\" rel=\"noopener noreferrer nofollow\">GCC<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Gcov\" rel=\"noopener noreferrer nofollow\">GCOV<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<\/td>\n<td>\n<p>\u0423\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 <em>GCC<\/em>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/wiki.documentfoundation.org\/Development\/Lcov\" rel=\"noopener noreferrer nofollow\">LCOV<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/linux.die.net\/man\/1\/genhtml\" rel=\"noopener noreferrer nofollow\">GENHTML<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 HTML \u0444\u043e\u0440\u043c\u0430\u0442 (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 lcov).<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/www.qt.io\/\" rel=\"noopener noreferrer nofollow\">Qt<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0421++ \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. \u0423\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/doc.qt.io\/qt-5\/qttest-index.html\" rel=\"noopener noreferrer nofollow\">QtTest<\/a>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/www.qt.io\/product\/development-tools\" rel=\"noopener noreferrer nofollow\">QtCreator<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 <em>IDE<\/em>.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b <em>QtTest<\/em> \u0438 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <em>QBS<\/em> &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/doc.qt.io\/qbs\/\" rel=\"noopener noreferrer nofollow\">QBS<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u043c\u043e\u0434\u0435\u0440\u043d \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e (\u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043d\u044f\u0448\u043a\u0430).<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u042f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0442.\u043a. \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u0430\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0442).<\/em><\/p>\n<h2>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 GCOV\/LCOV<\/h2>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <em>GCC<\/em> (\u0438\u043b\u0438 <em>CLang<\/em>), \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 (\u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0441\u0435\u043a\u0446\u0438\u0438, \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434., \u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b &#171;\u043a\u0430\u043a \u0435\u0441\u0442\u044c&#187;) \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0444\u043b\u0430\u0433 <em>&#8212;coverage<\/em> \u043a\u0430\u043a \u0432 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0442\u0430\u043a \u0438 \u0432 \u043e\u043f\u0446\u0438\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u043d\u0438\u043a\u0430\u043a \u0438\u043d\u0430\u0447\u0435, \u0442.\u043a.\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/em><\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u0443\u0435\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043d\u0435\u043a\u0438\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0438 \u0432\u0435\u0442\u0432\u044f\u0445 \u0432 \u043a\u043e\u0434\u0435 (\u044f \u0442\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e).<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u044d\u0442\u043e\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0442\u0438\u043b\u0438\u0442\u0435 <em>lcov<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 &#171;\u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0439&#187; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<h2>\u041a\u0430\u043a\u0438\u0435 \u043d\u0443\u0436\u043d\u044b \u0448\u0430\u0433\u0438<\/h2>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0448\u0430\u0433\u043e\u0432 \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u0438\u0448\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0438\u0448\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code> \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p> \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <em>lcov<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 <em>HTML<\/em> \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c <em>HTML<\/em> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0428\u0410\u04131. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 <\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>COVERAGE-EXAMPLE<\/code> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs<\/code><\/pre>\n<p> , \u0433\u0434\u0435: <\/p>\n<ul>\n<li>\n<p><code>coverage-example.qbs<\/code> &#8212; \u044d\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.      references: [         \"src\/src.qbs\", \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>src\/<\/code>&#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"sources\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0431\u0449\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.     references: [         \"libs\/libs.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.      ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>libs\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>libs.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"libs\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.     references: [         \"foo\/foo.qbs\" \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 'foo' \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] } <\/code><\/pre>\n<ul>\n<li>\n<p><code>libs\/foo\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>foo.qbs<\/code> :<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">StaticLibrary { \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0438\u043f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e.     name: \"foo\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 foo.a).     Depends { name: \"cpp\" } \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 QBS-\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f CPP.     Depends { name: \"Qt\"; submodules: \"core\" } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c QtCore.      files: [ \"foo.cpp\", \"foo.h\" ] \/\/ \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.      \/\/ \u042d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043d\u0442 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0430\u043a,     \/\/ \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u0430\u043a '#include &lt;foo\/foo.h>' \u0432\u043c\u0435\u0441\u0442\u043e      \/\/ '#include &lt;foo.h>'.     property string libIncludeBase: \"..\"     cpp.includePaths: [libIncludeBase]      \/\/ \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442     \/\/ \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438).     Export {         Depends { name: \"cpp\" }         cpp.includePaths: [product.libIncludeBase]     } }<\/code><\/pre>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>foo<\/code> \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438 \u043f\u0443\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <code>Foo<\/code> \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>encode()<\/code>:<\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;QByteArray>  class Foo { public:     enum class Number { One, Two, Three };     QByteArray encode(Number number) const; };<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u043c\u044f:<\/p>\n<pre><code class=\"cpp\">#include \"foo.h\"  QByteArray Foo::encode(Number number) const {     switch (number) {     case Number::One:         return \"one\";     case Number::Two:         return \"two\";     case Number::Three:         return \"three\";     default:         return \"unknown\";     } } <\/code><\/pre>\n<h3>\u0428\u0410\u04132. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"cpp\"> QByteArray Foo::encode(Number number) const<\/code><\/pre>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u043c\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>Number<\/code> \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0441 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <code>QtTest<\/code> \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 <code>Qt<\/code>, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>tests<\/code>:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs \u2502 \u2514\u2500\u2500\u2500tests     \u2502   tests.qbs     \u2502     \u2514\u2500\u2500\u2500auto         \u2502   auto.qbs         \u2502         \u2514\u2500\u2500\u2500foo                 foo.qbs                 tst_foo.cpp<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0444\u0430\u0439\u043b <code>coverage-example.qbs<\/code> \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e:<\/p>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\"     references: [         \"src\/src.qbs\",         \"tests\/tests.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<p>, \u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>tests\/tests.qbs<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>tests.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"tests\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u0435\u0441\u0442\u043e\u0432.     references: [         \"auto\/auto.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>auto\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>auto.qbs<\/code> (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 <code>foo<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"autotests\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438.     references: [         \"foo\/foo.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 'foo' \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] } <\/code><\/pre>\n<ul>\n<li>\n<p><code>auto\/foo\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>foo.qbs<\/code> :<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">CppApplication { \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0438\u043f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043a\u0430\u043a \u0421++ \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.     name: \"tst_foo\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430.     Depends { name: \"Qt\"; submodules: [\"test\"] } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c QtTest.     Depends { name: \"foo\" } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 'foo'.      files: [\"tst_foo.cpp\"] \/\/ \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 <code>tst_foo.cpp<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">#include &lt;foo\/foo.h>  #include &lt;QtTest>  Q_DECLARE_METATYPE(Foo::Number)  class tst_Foo final : public QObject {     Q_OBJECT  private slots:     void encode_data();     void encode(); };   void tst_Foo::encode_data() {     QTest::addColumn&lt;Foo::Number>(\"number\");     QTest::addColumn&lt;QByteArray>(\"name\");      QTest::newRow(\"one\") &lt;&lt; Foo::Number::One  &lt;&lt; QByteArray(\"one\");     QTest::newRow(\"two\") &lt;&lt; Foo::Number::Two  &lt;&lt; QByteArray(\"two\");     QTest::newRow(\"three\") &lt;&lt; Foo::Number::Three  &lt;&lt; QByteArray(\"three\");     QTest::newRow(\"unknown\") &lt;&lt; static_cast&lt;Foo::Number>(123) &lt;&lt; QByteArray(\"unknown\"); }  void tst_Foo::encode() {     QFETCH(Foo::Number, number);     QFETCH(QByteArray, name);      Foo foo;     const auto encoded = foo.encode(number);     QCOMPARE(encoded, name); }  QTEST_MAIN(tst_Foo) #include \"tst_foo.moc\" <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 <code>tst_Foo:encode_data()<\/code> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Foo::encode()<\/code> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 <code>tst_Foo::encode()<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u043a\u0430\u0434\u0436\u044b\u043c \u0438\u0437 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u042d\u0442\u043e \u0432\u0441\u0435 \u043c\u0430\u0433\u0438\u044f QtTest, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0438\u0437 \u043e\u0444\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Qt.<\/em><\/p>\n<h3>\u0428\u0410\u04133. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0435\u0449\u0435 \u0431\u0435\u0437 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u0448 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e, \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c (\u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435). \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043d \u0432\u044b\u0434\u0430\u0441\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u044d\u0442\u043e\u0442:<\/p>\n<pre><code>********* Start testing of tst_Foo ********* Config: Using QtTest library 5.14.2, Qt 5.14.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 10.2.0) PASS   : tst_Foo::initTestCase() PASS   : tst_Foo::encode(one) PASS   : tst_Foo::encode(two) PASS   : tst_Foo::encode(three) PASS   : tst_Foo::encode(unknown) PASS   : tst_Foo::cleanupTestCase() Totals: 6 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms ********* Finished testing of tst_Foo *********<\/code><\/pre>\n<h3>\u0428\u0410\u04134. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043f\u0446\u0438\u044e &#8212;coverage<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code> \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u0434\u0435\u0431\u0430\u0433 \u0440\u0435\u0436\u0438\u043c). <\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 \u0434\u0435\u043b\u043e \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442, \u0442.\u043a. \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0430\u0440\u0445\u0438\u0432\u0430\u0442\u043e\u0440. \u0410 \u0432\u043e\u0442 \u0443\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code> \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 <em>\u0448\u0430\u0433\u0438 \u0441\u0431\u043e\u0440\u043a\u0438<\/em>: <\/p>\n<ul>\n<li>\n<p>\u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 (\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443) <\/p>\n<\/li>\n<li>\n<p>\u0438 \u0432 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 (\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443). <\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e <em>QBS<\/em> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/doc.qt.io\/qbs\/qml-qbsmodules-cpp.html\" rel=\"noopener noreferrer nofollow\">cpp<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0441\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>cpp.driverFlags<\/code> &#8212; \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code> \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0441\u0430\u043c\u044b\u0439 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>cpp.driverFlags<\/code> \u0438 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0435\u043a\u0438 \u0438 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u041d\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435, \u0438 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u043e\u0449\u044c <em>QBS<\/em>. \ud83d\ude09<\/p>\n<p>\u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 <em>QBS<\/em> \u043c\u043e\u0434\u0443\u043b\u044c, \u0438 \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u0430\u043a <code>coverage<\/code>. \u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043a \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500qbs \u2502   \u2514\u2500\u2500\u2500modules \u2502       \u2514\u2500\u2500\u2500coverage \u2502               coverage.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs \u2502 \u2514\u2500\u2500\u2500tests     \u2502   tests.qbs     \u2502     \u2514\u2500\u2500\u2500auto         \u2502   auto.qbs         \u2502         \u2514\u2500\u2500\u2500foo                 foo.qbs                 tst_foo.cpp<\/code><\/pre>\n<p>, \u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>qbs\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430\u0448\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <em>QBS<\/em> \u043c\u043e\u0434\u0443\u043b\u0438 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><code>qbs\/modules\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0438\u043c\u044f <code>modules<\/code>).<\/p>\n<\/li>\n<li>\n<p><code>qbs\/modules\/coverage\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 <em>QBS<\/em> \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f <code>coverage<\/code> \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <code>coverage.qbs<\/code> : <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Module {     \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 GCC      \/\/ \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0435\u0441\u0442\u044c debug.     condition: qbs.debugInformation &amp;&amp; qbs.toolchain.contains(\"gcc\")     Depends { name: \"cpp\" } \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 QBS-\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f CPP.     cpp.driverFlags: [\"--coverage\"] \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0444\u043b\u0430\u0433\u0438 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0443. }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043a \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>foo.qbs<\/code>:<\/p>\n<pre><code class=\"javascript\">StaticLibrary {     name: \"foo\"     Depends { name: \"cpp\" }     Depends { name: \"coverage\" } \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f coverage.     Depends { name: \"Qt\"; submodules: \"core\" }      files: [ \"foo.cpp\", \"foo.h\" ]      property string libIncludeBase: \"..\"     cpp.includePaths: [libIncludeBase]      Export {         Depends { name: \"cpp\" }         Depends { name: \"coverage\" } \/\/ \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f coverage.         cpp.includePaths: [product.libIncludeBase]     } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u043f\u0446\u0438\u044f <code>--coverage<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. \u0410 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f <code>coverage<\/code> \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/doc.qt.io\/qbs\/qml-qbslanguageitems-export.html\" rel=\"noopener noreferrer nofollow\">Export <\/a>, \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432\u0448\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <code>foo<\/code> \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0443\u0431\u0438\u0432\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0443\u0445 (\u0438 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0439\u0446\u0435\u0432).<\/p>\n<p>\u0418 \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0433\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 &#8212; \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <em>QBS<\/em> \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c <code>coverage<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>coverage-example.qbs<\/code> \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443:<\/p>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\"     qbsSearchPaths: \"qbs\" \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c QBS \u0447\u0442\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 qbs     references: [         \"src\/src.qbs\",         \"tests\/tests.qbs\"     ] } <\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0431\u044b\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d &#8212; \u043d\u043e \u043d\u0435\u0442. \u041f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0446\u0438\u0438 <code>--coverage<\/code> \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430, \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <code>*.gcno<\/code>:<\/p>\n<pre><code class=\"bash\">user@ubuntu:~\/Documents\/coverage-git\/build-coverage-example-Desktop-Debug\/Debug_Desktop_038b678e9426a45b$ ls foo.0beec7b5\/3a52ce780950d4d9\/ foo.cpp.gcno  foo.cpp.o user@ubuntu:~\/Documents\/coverage-git\/build-coverage-example-Desktop-Debug\/Debug_Desktop_038b678e9426a45b$ ls tst-foo.e3f741e4\/3a52ce780950d4d9\/ tst_foo.cpp.gcda  tst_foo.cpp.gcno  tst_foo.cpp.o<\/code><\/pre>\n<p>\u041d\u043e \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u043e\u043c\u043e\u0439\u043a\u0443 \u0438 \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430 <em>\u0441\u0430\u043c\u043e\u0442\u0435\u043a<\/em>. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>clean<\/code> \u043e\u0447\u0438\u0449\u0430\u043b\u0430\u0441\u044c \u0432\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <code>coverage<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u043e \u0431\u044b \u0444\u0430\u0439\u043b\u044b <code>*.gcno<\/code> \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b (\u0442.\u0435. \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445 \u0432 \u0433\u0440\u0430\u0444 \u0441\u0431\u043e\u0440\u043a\u0438 <em>QBS<\/em>). <\/p>\n<pre><code class=\"javascript\">import qbs.FileInfo \/\/ \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 QBS-\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043d\u0444\u043e\u0439 \u043e \u0444\u0430\u0439\u043b\u0430\u0445. import qbs.Utilities \/\/ \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c QBS-\u043d\u044b\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0443\u0442\u0438\u043b\u0438\u0442.  Module {     condition: qbs.debugInformation &amp;&amp; qbs.toolchain.contains(\"gcc\")     additionalProductTypes: [\"gcno\"] \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0433 gcno.      Depends { name: \"cpp\" }     cpp.driverFlags: [\"--coverage\"]      Rule { \/\/ \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u0444\u0435\u0439\u043a\u043e\u0432\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 *.gcno.         \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0442\u043e \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b *.gcno \u0438\u0437         \/\/ \u0441\u043e\u0440\u0446\u043e\u0432 *.cpp \u0438\u043b\u0438 *.c.          inputs: [\"cpp\", \"c\"]          \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f \u0442\u0435\u0433\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 (\u043b\u044e\u0431\u043e\u0435,          \/\/ \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 gcno).         outputFileTags: [\"gcno\"]         \/\/ \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430:         \/\/ - \u0442\u043e \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u0430\u043c *.gcno \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0433 gcno.         \/\/ - \u0442\u043e \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u044b *.gcno \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435          \/\/   (\u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0438\u043a\u0430\u043c\u0438).         outputArtifacts: {             return [{                 fileTags: [\"gcno\"],                 filePath: FileInfo.joinPaths(Utilities.getHash(input.baseDir),                                              input.fileName + \".gcno\")             }];         }         \/\/ \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0442.\u0435. \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 *.c *.cpp         \/\/ \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b *.gcno. \u0410 \u043d\u0438\u043a\u0430\u043a - \u043c\u044b \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441,         \/\/ \u0442.\u043a. \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434         \/\/ \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 - \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442,          \/\/ \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0432 \u043a\u043e\u043d\u043e\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:         \/\/ generating foo.gcno         prepare: {             var cmd = new JavaScriptCommand();             cmd.description = \"generating \" + output.fileName;             return [cmd];         }     } }<\/code><\/pre>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/em><\/p>\n<ul>\n<li>\n<p><em>\u0422.\u043a. \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0430\u0440\u0442\u0438\u0444\u0430\u043a\u0442<\/em> <code>gcno<\/code> <em>\u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d (\u043e\u043d \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043d\u0438 \u0432 \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c) \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044f\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c QBS-\u0443 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0446\u0438\u0438 \u043c\u043e\u0434\u0443\u043b\u044f<\/em> <code>additionalProductTypes<\/code>.<\/p>\n<\/li>\n<li>\n<p><em>\u0422.\u043a. \u043d\u0430\u0448\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 (\u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b *.gcno \u043a\u0430\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b), \u0442\u043e \u0438 \u0435\u0433\u043e \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0436\u0435.<\/em><\/p>\n<\/li>\n<\/ul>\n<h3>\u0428\u0410\u04135. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0443\u0436\u0435 \u0441 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u043a\u043e\u0434\u0430<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u0418 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e (\u0432\u044b\u0432\u0435\u043b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b):<\/p>\n<pre><code>********* Start testing of tst_Foo ********* Config: Using QtTest library 5.14.2, Qt 5.14.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 10.2.0) PASS   : tst_Foo::initTestCase() PASS   : tst_Foo::encode(one) PASS   : tst_Foo::encode(two) PASS   : tst_Foo::encode(three) PASS   : tst_Foo::encode(unknown) PASS   : tst_Foo::cleanupTestCase() Totals: 6 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms ********* Finished testing of tst_Foo *********<\/code><\/pre>\n<p>\u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u0442\u0447\u0435\u0442\u043e\u0432 <code>*.gcda<\/code>:<\/p>\n<pre><code class=\"bash\">user@ubuntu:~\/Documents\/coverage-git\/build-coverage-example-Desktop-Debug\/Debug_Desktop_038b678e9426a45b$ ls foo.0beec7b5\/3a52ce780950d4d9\/ foo.cpp.gcda  foo.cpp.gcno  foo.cpp.o user@ubuntu:~\/Documents\/coverage-git\/build-coverage-example-Desktop-Debug\/Debug_Desktop_038b678e9426a45b$ ls tst-foo.e3f741e4\/3a52ce780950d4d9\/ tst_foo.cpp.gcda  tst_foo.cpp.gcno  tst_foo.cpp.o<\/code><\/pre>\n<p>\u041d\u043e \u043c\u044b \u043b\u0435\u043d\u0442\u044f\u0438 \u043d\u0435 \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 <em>QBS<\/em> \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <a href=\"https:\/\/doc.qt.io\/qbs\/qml-qbsconvenienceitems-autotestrunner.html\" rel=\"noopener noreferrer nofollow\">AutotestRunner<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <code>coverage-example.qbs<\/code> :<\/p>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\"     qbsSearchPaths: \"qbs\"      AutotestRunner { }      references: [         \"src\/src.qbs\",         \"tests\/tests.qbs\"     ] }<\/code><\/pre>\n<p>\u0418 \u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433 <code>autotest<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043d\u0430\u0441 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0432 <code>tests\/auto\/foo\/foo.qbs)<\/code>:<\/p>\n<pre><code class=\"javascript\">CppApplication {     name: \"tst_foo\"     type: base.concat(\"autotest\") \/\/ \u0414\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0442\u0435\u0433 - \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442.     Depends { name: \"Qt\"; submodules: [\"test\"] }     Depends { name: \"foo\" }      files: [\"tst_foo.cpp\"] }<\/code><\/pre>\n<p>\u0418 \u0442\u0435\u043f\u0440\u0435\u0440\u044c, \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u043d\u043d\u0435\u0440\u0430, <em>QBS<\/em> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442 \u0432\u0441\u0435 \u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 (\u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438), \u0441\u043e\u0431\u0435\u0440\u0435\u0442 \u0438\u0445 (\u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u044b), \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<h3>\u0428\u0410\u04136. \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 <em>lcov<\/em>. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 &#8212; \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 \u0437\u0430\u0440\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u0442.\u043a. \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>AutotestRunner<\/code> \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442, \u043d\u043e \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b <code>*.gcda<\/code> \u043a\u0430\u043a \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0438 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 <em>lcov<\/em>. <\/p>\n<p>\u041d\u0430\u0437\u043e\u0432\u0435\u043c \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u043a\u0430\u043a <code>CoverageRunner<\/code> \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>imports<\/code>:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500qbs \u2502   \u251c\u2500\u2500\u2500imports \u2502   \u2502       CoverageRunner.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500modules \u2502       \u2514\u2500\u2500\u2500coverage \u2502               coverage.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs \u2502 \u2514\u2500\u2500\u2500tests     \u2502   tests.qbs     \u2502     \u2514\u2500\u2500\u2500auto         \u2502   auto.qbs         \u2502         \u2514\u2500\u2500\u2500foo                 foo.qbs                 tst_foo.cpp<\/code><\/pre>\n<p>, \u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>qbs\/imports\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u0442\u043e\u0440\u0438\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.  <\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>CoverageRunner.qbs<\/code> :<\/p>\n<pre><code class=\"javascript\">import qbs.File import qbs.FileInfo import qbs.ModUtils import qbs.Probes import qbs.Utilities  Product {     name: \"coverage-runner\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044e \u0442\u0435\u0441\u0442\u043e\u0432.      \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0435\u0433 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445     \/\/ \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043d\u0430\u0448\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u0435\u043c. \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 - \u044d\u0442\u043e      \/\/ \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 HTML \u0441\u0442\u0440\u0430\u043d\u0438\u0446.     type: [\"out_html\"]      \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c QBS-\u0443 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u044f\u0432\u043d\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438.     builtByDefault: false      \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b lcov.     property stringList environment: ModUtils.flattenDictionary(qbs.commonRunEnvironment)     \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0435 lcov, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u043d\u0438\u043a\u043e\u043c.     property path lcovPath: lcovProbe.filePath     \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0443\u0442\u0438\u043b\u0438\u0442\u0435 genhtml, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u043d\u0438\u043a\u043e\u043c.     property path genhtmlPath: genhtmlProbe.filePath      \/\/ \u041f\u0440\u043e\u0431\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0448\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 lcov.     Probes.BinaryProbe {         id: lcovProbe         names: \"lcov\"     }     \/\/ \u041f\u0440\u043e\u0431\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 genhtml.     Probes.BinaryProbe {         id: genhtmlProbe         names: \"genhtml\"     }      \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043b\u044e\u0431\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0441 \u0442\u0435\u0433\u043e\u043c autotest.     Depends {         productTypes: \"autotest\"         limitToSubProject: true     }      \/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b     \/\/ \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0438\u043c\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b *.gcna \u0432 \u0433\u0440\u0430\u0444 \u0441\u0431\u043e\u0440\u043a\u0438.     Rule {         id: gcnoGenerator         inputsFromDependencies: [\"application\"]         \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0433 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c, \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c         \/\/ \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c.         outputFileTags: [\"gcda\"]         outputArtifacts: {             var artifacts = [];              function traverse(dep) {                 var gcnos = dep.artifacts[\"gcno\"] || [];                 gcnos.forEach(function(gcno) {                     artifacts.push({                         fileTags: [\"gcda\"],                         filePath: FileInfo.joinPaths(FileInfo.path(gcno.filePath), gcno.completeBaseName + \".gcda\")                     });                 });                 dep.dependencies.forEach(traverse);             }              product.dependencies.forEach(traverse);             return artifacts;         }         prepare: {             if (!input.product.type.contains(\"autotest\")) {                 var cmd = new JavaScriptCommand();                 cmd.silent = true;                 return cmd;             }             var commandFilePath;             var installed = input.moduleProperty(\"qbs\", \"install\");             if (installed)                 commandFilePath = ModUtils.artifactInstalledFilePath(input);             if (!commandFilePath || !File.exists(commandFilePath))                 commandFilePath = input.filePath;             var arguments = (input.autotest &amp;&amp; input.autotest.arguments &amp;&amp; input.autotest.arguments.length > 0) ? input.autotest.arguments : [];             var workingDir = (input.autotest &amp;&amp; input.autotest.workingDir) ? input.autotest.workingDir : FileInfo.path(commandFilePath);             var fullCommandLine = [].concat([commandFilePath]).concat(arguments);             var cmd = new Command(fullCommandLine[0], fullCommandLine.slice(1));             cmd.description = \"running test \" + input.fileName;             cmd.environment = product.environment;             cmd.workingDirectory = workingDir;             cmd.jobPool = \"coverage-runner\";             if (input.autotest &amp;&amp; input.autotest.allowFailure)                 cmd.maxExitCode = 32767;             return cmd;         }     }      \/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u041e\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432\u0441\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435      \/\/ \u0444\u0430\u0439\u043b\u044b *.gcda, \u043f\u043e\u0434\u0430\u0435\u0442 \u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442\u0435 lcov \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f     \/\/ \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c *.info.     Rule {         id: infoGenerator         inputs: [\"gcda\"] \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b *.gcda \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b\u0443.                  \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0433 \u0434\u043b\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0445         \/\/ \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c.         outputFileTags: [\"src_info\"]         outputArtifacts: {             return [{                 fileTags: [\"src_info\"],                 filePath: FileInfo.joinPaths(Utilities.getHash(input.baseDir), input.fileName + \".info\")             }];         }         \/\/ \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 lcov \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 *.gcda \u0438         \/\/ \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 *.info.         prepare: {             var args = [\"--quiet\", \"--capture\"];             args.push(\"--directory\", FileInfo.path(input.filePath));             args.push(\"--output-file\", output.filePath);             var cmd = new Command(product.lcovPath, args);             cmd.description = \"generating \" + output.fileName;             return cmd;         }     }      \/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u041e\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b *.info \u0438      \/\/ \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445 \u0432 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &lt;\u0438\u043c\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430>.info, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442     \/\/ \u0440\u044f\u0434\u043e\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 (\u044f \u0442\u0430\u043a \u0437\u0430\u0445\u043e\u0442\u0435\u043b).     Rule {         id: infoMerger         multiplex: true         inputs: [\"src_info\"] \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b *.info.          \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0433 \u0430\u0440\u0442\u0438\u0444\u0430\u043a\u0442\u0430, \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u043e\u043c\u0443 *.info         \/\/ \u0444\u0430\u0439\u043b\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u043c\u0443 \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c.         outputFileTags: [\"out_info\"]         outputArtifacts: {             return [{                 fileTags: [\"out_info\"],                 filePath: FileInfo.joinPaths(product.destinationDirectory, product.targetName + \".info\")             }];         }         \/\/ \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 lcov \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043b\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432         \/\/ *.info \u0432 \u043e\u0434\u0438\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b *.info.         prepare: {             var args = [\"--quiet\"];             inputs.src_info.forEach(function(info) {                 args.push(\"--add-tracefile\", info.filePath);             });             args.push(\"--output-file\", output.filePath);             var cmd = new Command(product.lcovPath, args);             cmd.description = \"generating \" + output.fileName;             return cmd;         }     }      \/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0435 (\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435) \u043f\u0440\u0430\u0432\u0438\u043b\u043b\u043e \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u041e\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434      \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b *.info \u0438 \u043f\u043e\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0435 genhtml \u0434\u043b\u044f     \/\/ \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0432\u0438\u0434\u0435 HTML \u0441\u0442\u0440\u0430\u043d\u0438\u0446.     Rule {         id: htmlGenerator         inputs: [\"out_info\"] \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b.          \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u0433 \u0430\u0440\u0442\u0438\u0444\u0430\u043a\u0442\u0430 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 HTML          \/\/ \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c.          \/\/ \u0418\u043c\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0433\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u0435\u0433\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 - \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f.         outputFileTags: [\"out_html\"]         outputArtifacts: {             return [{                 fileTags: [\"out_html\"],                 filePath: FileInfo.joinPaths(product.destinationDirectory, \"html\")             }];         }         \/\/ \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 genhtml \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 HTML \u0441\u0442\u0430\u043d\u0438\u0446 \u0438\u0437          \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 *.info.         prepare: {             var args = [\"--quiet\", \"--ignore-errors\"];             args.push(\"source\", input.filePath);             args.push(\"--output-directory\", output.filePath);             var cmd = new Command(product.genhtmlPath, args);             cmd.description = \"generating html\";             return cmd;         }     } }<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b, \u0432\u044b\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432 \u0433\u0440\u0430\u0444\u0435 \u0441\u0431\u043e\u0440\u043a\u0438. \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <code>*.gcda<\/code> .<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0430\u0447\u0430 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <code>*.gcda<\/code> \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <em>lcov<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u043b\u043e\u0432 <code>*.info<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0430\u0447\u0430 \u0432\u0441\u0435\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 <code>*.info<\/code> \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <em>lcov<\/em> \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u0438\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b <code>*.info<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0430\u0447\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>*.info<\/code> \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <em>genhtml<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>coverage-example.qbs<\/code>, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0432 \u043d\u0435\u043c <code>AutotestRunner<\/code> \u043d\u0430 \u043d\u0430\u0448 <code>CoverageRunner<\/code> :<\/p>\n<pre><code class=\"javascript\">import \"qbs\/imports\/CoverageRunner.qbs\" as CoverageRunner \/\/ \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c  Project {     name: \"coverage-example\"     qbsSearchPaths: \"qbs\"      CoverageRunner { } \/\/ \u0414\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044c.      references: [         \"src\/src.qbs\",         \"tests\/tests.qbs\"     ] }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 &#8212; \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 <code>coverage-runner<\/code>.<\/p>\n<h3>\u0428\u0410\u04137. \u041f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f, \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u0435\u043b\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"bash\">user@ubuntu:~\/Documents\/coverage-git\/build-coverage-example-Desktop-Debug\/Debug_Desktop_038b678e9426a45b$ ls coverage-runner.90e4c3ec\/html\/ amber.png  emerald.png  gcov.css  glass.png  home  index.html  index-sort-f.html  index-sort-l.html  QtCore  QtTest  ruby.png  snow.png  updown.png  usr<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b <code>index.html<\/code> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/44c\/9cf\/f63\/44c9cff636dfd39534c0d36710dfde0a.png\" alt=\"\u041e\u0431\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f.\" title=\"\u041e\u0431\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f.\" width=\"1608\" height=\"402\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/44c\/9cf\/f63\/44c9cff636dfd39534c0d36710dfde0a.png\"\/><figcaption>\u041e\u0431\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f.<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043b\u0438\u0448\u043d\u044f\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0442.\u043a. \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 <code>*.info<\/code>, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u043e \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/97e\/e07\/2fd\/97ee072fdbc5f2bc23cf445cb432b48f.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\" width=\"1610\" height=\"258\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/97e\/e07\/2fd\/97ee072fdbc5f2bc23cf445cb432b48f.png\"\/><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/155\/1f8\/d46\/1551f8d464252ed381a92df1490060da.png\" alt=\"\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\" title=\"\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\" width=\"1615\" height=\"444\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/155\/1f8\/d46\/1551f8d464252ed381a92df1490060da.png\"\/><figcaption>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0434\u0430\u0442\u0430-\u0441\u0435\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>HTML<\/em> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \ud83d\ude09<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u0440\u0430\u0442\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0432\u0441\u044e \u043c\u043e\u0449\u044c \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c <em>QBS<\/em> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430 <a href=\"https:\/\/github.com\/denis-shienkov\/coverage-example\" rel=\"noopener noreferrer nofollow\">github<\/a>. <\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <a href=\"https:\/\/doc.qt.io\/qbs\/\" rel=\"noopener noreferrer nofollow\">QBS<\/a>.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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:\/\/habr.com\/ru\/articles\/577686\/\"> https:\/\/habr.com\/ru\/articles\/577686\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438 \u0432\u0441\u0435 \u043a\u0442\u043e \u0438\u043c \u0441\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442. \u042f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <em>QBS<\/em> \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 <em>Qt<\/em> \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b <em>QtTest<\/em> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442 <em>gcov\/lcov<\/em>. \u041a\u043e\u043c\u0443 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043a\u0430\u0442.  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d &#171;\u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430&#187;. \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 (\u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 <em>\u041f\u041e<\/em>) \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0447\u0435\u0433\u043e-\u043b\u0438\u0431\u043e. <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e, \u044d\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0435\u0433\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u043c) \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 (\u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b). <\/p>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u0432\u0435\u0442\u0432\u0435\u0439 \u043a\u043e\u0434\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0432\u0435\u0442\u0432\u0435\u0439.<\/p>\n<h2>\u0427\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/h2>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0434\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 &#171;\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0442\u0438\u0432\u043b\u0435\u043d\u0438\u044f&#187; \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 <em>\u041f\u041e<\/em> (\u0442.\u043a. \u043c\u044b \u0432\u0441\u0435 \u0432 \u0434\u0443\u0448\u0435 \u043b\u0435\u043d\u0442\u044f\u0438):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0427\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435<\/p>\n<\/td>\n<td>\n<p>\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0432\u044b\u0431\u043e\u0440\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Linux\" rel=\"noopener noreferrer nofollow\">GNU\/Linux<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/gcc.gnu.org\/\" rel=\"noopener noreferrer nofollow\">GCC<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Gcov\" rel=\"noopener noreferrer nofollow\">GCOV<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<\/td>\n<td>\n<p>\u0423\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 <em>GCC<\/em>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/wiki.documentfoundation.org\/Development\/Lcov\" rel=\"noopener noreferrer nofollow\">LCOV<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/linux.die.net\/man\/1\/genhtml\" rel=\"noopener noreferrer nofollow\">GENHTML<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 HTML \u0444\u043e\u0440\u043c\u0430\u0442 (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 lcov).<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/www.qt.io\/\" rel=\"noopener noreferrer nofollow\">Qt<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0421++ \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. \u0423\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/doc.qt.io\/qt-5\/qttest-index.html\" rel=\"noopener noreferrer nofollow\">QtTest<\/a>.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/www.qt.io\/product\/development-tools\" rel=\"noopener noreferrer nofollow\">QtCreator<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 <em>IDE<\/em>.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b <em>QtTest<\/em> \u0438 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <em>QBS<\/em> &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187;.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"103\" width=\"103\">\n<p><a href=\"https:\/\/doc.qt.io\/qbs\/\" rel=\"noopener noreferrer nofollow\">QBS<\/a><\/p>\n<\/td>\n<td data-colwidth=\"253\" width=\"253\">\n<p>\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/td>\n<td>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u043c\u043e\u0434\u0435\u0440\u043d \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e (\u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435, \u043d\u044f\u0448\u043a\u0430).<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u042f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0442.\u043a. \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u0430\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0442).<\/em><\/p>\n<h2>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 GCOV\/LCOV<\/h2>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <em>GCC<\/em> (\u0438\u043b\u0438 <em>CLang<\/em>), \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 (\u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0441\u0435\u043a\u0446\u0438\u0438, \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u0434., \u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b &#171;\u043a\u0430\u043a \u0435\u0441\u0442\u044c&#187;) \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0444\u043b\u0430\u0433 <em>&#8212;coverage<\/em> \u043a\u0430\u043a \u0432 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0442\u0430\u043a \u0438 \u0432 \u043e\u043f\u0446\u0438\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u043d\u0438\u043a\u0430\u043a \u0438\u043d\u0430\u0447\u0435, \u0442.\u043a.\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/em><\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u0443\u0435\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043d\u0435\u043a\u0438\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0431\u043e\u0440\u043e\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0438 \u0432\u0435\u0442\u0432\u044f\u0445 \u0432 \u043a\u043e\u0434\u0435 (\u044f \u0442\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e).<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u044d\u0442\u043e\u0442 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0442\u0438\u043b\u0438\u0442\u0435 <em>lcov<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 &#171;\u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u043e\u0439&#187; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 <em>HTML<\/em> \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438.<\/p>\n<h2>\u041a\u0430\u043a\u0438\u0435 \u043d\u0443\u0436\u043d\u044b \u0448\u0430\u0433\u0438<\/h2>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0448\u0430\u0433\u043e\u0432 \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u0438\u0448\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0438\u0448\u0435\u043c \u043d\u0435\u043a\u0438\u0439 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0438\u043d\u043a\u0443\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043f\u0446\u0438\u044e <code>--coverage<\/code> \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p> \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0432 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <em>lcov<\/em> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 <em>HTML<\/em> \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c <em>HTML<\/em> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0428\u0410\u04131. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 <\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>COVERAGE-EXAMPLE<\/code> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs<\/code><\/pre>\n<p> , \u0433\u0434\u0435: <\/p>\n<ul>\n<li>\n<p><code>coverage-example.qbs<\/code> &#8212; \u044d\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.      references: [         \"src\/src.qbs\", \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>src\/<\/code>&#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"sources\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0431\u0449\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.     references: [         \"libs\/libs.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.      ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>libs\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>libs.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"libs\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.     references: [         \"foo\/foo.qbs\" \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 'foo' \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] } <\/code><\/pre>\n<ul>\n<li>\n<p><code>libs\/foo\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>foo.qbs<\/code> :<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">StaticLibrary { \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0438\u043f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e.     name: \"foo\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 foo.a).     Depends { name: \"cpp\" } \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 QBS-\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f CPP.     Depends { name: \"Qt\"; submodules: \"core\" } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c QtCore.      files: [ \"foo.cpp\", \"foo.h\" ] \/\/ \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.      \/\/ \u042d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043d\u0442 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442\u0430\u043a,     \/\/ \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u0430\u043a '#include &lt;foo\/foo.h>' \u0432\u043c\u0435\u0441\u0442\u043e      \/\/ '#include &lt;foo.h>'.     property string libIncludeBase: \"..\"     cpp.includePaths: [libIncludeBase]      \/\/ \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442     \/\/ \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438).     Export {         Depends { name: \"cpp\" }         cpp.includePaths: [product.libIncludeBase]     } }<\/code><\/pre>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <code>foo<\/code> \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438 \u043f\u0443\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <code>Foo<\/code> \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>encode()<\/code>:<\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;QByteArray>  class Foo { public:     enum class Number { One, Two, Three };     QByteArray encode(Number number) const; };<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u043c\u044f:<\/p>\n<pre><code class=\"cpp\">#include \"foo.h\"  QByteArray Foo::encode(Number number) const {     switch (number) {     case Number::One:         return \"one\";     case Number::Two:         return \"two\";     case Number::Three:         return \"three\";     default:         return \"unknown\";     } } <\/code><\/pre>\n<h3>\u0428\u0410\u04132. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"cpp\"> QByteArray Foo::encode(Number number) const<\/code><\/pre>\n<p>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u043c\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>Number<\/code> \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0441 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <code>QtTest<\/code> \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 <code>Qt<\/code>, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>tests<\/code>:<\/p>\n<pre><code>COVERAGE-EXAMPLE \u2502   .gitignore \u2502   coverage-example.qbs \u2502 \u251c\u2500\u2500\u2500src \u2502   \u2502   src.qbs \u2502   \u2502 \u2502   \u2514\u2500\u2500\u2500libs \u2502       \u2502   libs.qbs \u2502       \u2502 \u2502       \u2514\u2500\u2500\u2500foo \u2502               foo.cpp \u2502               foo.h \u2502               foo.qbs \u2502 \u2514\u2500\u2500\u2500tests     \u2502   tests.qbs     \u2502     \u2514\u2500\u2500\u2500auto         \u2502   auto.qbs         \u2502         \u2514\u2500\u2500\u2500foo                 foo.qbs                 tst_foo.cpp<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0444\u0430\u0439\u043b <code>coverage-example.qbs<\/code> \u043f\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0434\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e:<\/p>\n<pre><code class=\"javascript\">Project {     name: \"coverage-example\"     references: [         \"src\/src.qbs\",         \"tests\/tests.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<p>, \u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>tests\/tests.qbs<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>tests.qbs<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"tests\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0442\u0435\u0441\u0442\u043e\u0432.     references: [         \"auto\/auto.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] }<\/code><\/pre>\n<ul>\n<li>\n<p><code>auto\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <code>auto.qbs<\/code> (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 <code>foo<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>):<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">Project {     name: \"autotests\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438.     references: [         \"foo\/foo.qbs\" \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 'foo' \u0432 \u043f\u0440\u043e\u0435\u043a\u0442.     ] } <\/code><\/pre>\n<ul>\n<li>\n<p><code>auto\/foo\/<\/code> &#8212; \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>foo<\/code>, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>foo.qbs<\/code> :<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"javascript\">CppApplication { \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0442\u0438\u043f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 \u043a\u0430\u043a \u0421++ \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.     name: \"tst_foo\" \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430.     Depends { name: \"Qt\"; submodules: [\"test\"] } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c QtTest.     Depends { name: \"foo\" } \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 'foo'.      files: [\"tst_foo.cpp\"] \/\/ \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430. }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430 <code>tst_foo.cpp<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">#include &lt;foo\/foo.h>  #include &lt;QtTest>  Q_DECLARE_METATYPE(Foo::Number)  class tst_Foo final : public QObject {     Q_OBJECT  private slots:     void encode_data();     void encode(); };   void tst_Foo::encode_data() {     QTest::addColumn&lt;Foo::Number>(\"number\");     QTest::addColumn&lt;QByteArray>(\"name\");      QTest::newRow(\"one\") &lt;&lt; Foo::Number::One  &lt;&lt; QByteArray(\"one\");     QTest::newRow(\"two\") &lt;&lt; Foo::Number::Two  &lt;&lt; QByteArray(\"two\");     QTest::newRow(\"three\") &lt;&lt; Foo::Number::Three  &lt;&lt; QByteArray(\"three\");     QTest::newRow(\"unknown\") &lt;&lt; static_cast&lt;Foo::Number>(123) &lt;&lt; QByteArray(\"unknown\"); }  void tst_Foo::encode() {     QFETCH(Foo::Number, number);     QFETCH(QByteArray, name);      Foo foo;     const auto encoded = foo.encode(number);     QCOMPARE(encoded, name); }  QTEST_MAIN(tst_Foo) #include \"tst_foo.moc\" <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 <code>tst_Foo:encode_data()<\/code> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Foo::encode()<\/code> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u0442\u043e\u0434 \u0442\u0435\u0441\u0442\u0430 <code>tst_F<\/code><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-383428","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383428","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=383428"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383428\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=383428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=383428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=383428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}