{"id":487118,"date":"2026-07-13T12:55:56","date_gmt":"2026-07-13T12:55:56","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=487118"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=487118","title":{"rendered":"Take\u00a0\u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u00a0C++ \u0441\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c \u043d\u0430\u00a0TOML \u0432\u043c\u0435\u0441\u0442\u043e Makefile"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div class=\"floating-image\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0438\u00a0\u2014 <strong>Take<\/strong> (C++17, \u0431\u0435\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d header only TOML\u2011\u043f\u0430\u0440\u0441\u0435\u0440). \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c Make (\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0446\u0435\u043b\u0438, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438, \u0448\u0435\u043b\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b), \u043d\u043e\u00a0\u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0442\u0430\u0431\u044b, <code>$@<\/code>\/<code>$&lt;<\/code> \u0438 \u043f\u0440\u043e\u0447\u0443\u044e \u043c\u0430\u0433\u0438\u044e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Makefile, \u0430\u00a0\u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <code>.toml<\/code>\u2011\u0444\u0430\u0439\u043b.<\/p>\n<\/div>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>default = \"build\"[vars]CXX   = \"gcc\"FLAGS = \"-O2 -Wall -Wextra\"OUT   = \"msin\"[build]desc = \"Build msin\"run  = [  \"${CXX} ${FLAGS} -Iinclude src\/main.c src\/functions.c -o ${OUT}\",][install]desc = \"Install msin (sudo or su)\"run  = [  \"install -d \/usr\/local\/bin\",  \"install -m 755 ${OUT} \/usr\/local\/bin\/msin\",][clean]desc = \"Clean build\"run  = [\"rm -f ${OUT}\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f (\u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 <code>[vars]<\/code>)\u00a0\u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb: \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>take &lt;\u0438\u043c\u044f&gt;<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>take build<\/code> \u0441\u043e\u0431\u0435\u0440\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430 <code>take install<\/code>\u00a0\u2014 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0432 <code>\/usr\/local\/bin<\/code>.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h3>\n<p>\u0412 <code>[vars]<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>${VAR}<\/code> \u0432\u00a0\u043b\u044e\u0431\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>run<\/code>. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u00a0\u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 DSL \u0434\u043b\u044f\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435, \u0442\u0435\u043c\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, Take \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p><code>${TAKE_FUNC}<\/code>\u00a0\u2014 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p><code>${TAKE_DIR}<\/code>\u00a0\u2014 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 <code>take.toml<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>${ARGS}<\/code>\u00a0\u2014 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u043f\u043e\u0441\u043b\u0435 <code>--<\/code> \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043b\u044e\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 <code>${env:VARNAME}<\/code>.<\/p>\n<h3>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438<\/h3>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>deps<\/code>:<\/p>\n<pre><code>[build]desc = \"Build msin\"run  = [\"${CXX} ${FLAGS} -Iinclude src\/main.c -o ${OUT}\"][install]desc = \"Install after build\"deps = [\"build\"]run  = [\"install -m 755 ${OUT} \/usr\/local\/bin\/msin\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>take install<\/code> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 <code>build<\/code>, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u00a0\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u043e\u0432\u00a0\u2014 \u0435\u0441\u043b\u0438 \u0433\u0434\u0435\u2011\u0442\u043e \u0432\u00a0\u0446\u0435\u043f\u043e\u0447\u043a\u0435 <code>deps<\/code> \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b, Take \u0441\u0440\u0430\u0437\u0443 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441\u00a0\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0443\u0445\u043e\u0434\u0430 \u0432\u00a0\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u00a0\u0440\u0443\u0447\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code class=\"bash\">roit@Debian:\/sdisk\/p\/progect\/p\/msin$ take==&gt; take build \u2014 Build msin  $ gcc -O2 -Wall -Wextra -Iinclude src\/main.c src\/functions.c -o msinsrc\/main.c: In function \u2018handle_encrypt\u2019:src\/main.c:48:55: warning: unused parameter \u2018filename\u2019 [-Wunused-parameter]   48 | void handle_encrypt(const char* password, const char* filename) {      |                                           ~~~~~~~~~~~~^~~~~~~~^Ctake: error: [build] The command finished with code 1: gcc -O2 -Wall -Wextra -Iinclude src\/main.c src\/functions.c -o msinroit@Debian:\/sdisk\/p\/progect\/p\/msin$ <\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u2011\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043d\u0430\u00a0Linux\/macOS\/Windows, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e <code>run<\/code> \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u0442\u044c <code>run_linux<\/code>, <code>run_macos<\/code>, <code>run_windows<\/code> \u0438\u043b\u0438 <code>run_unix<\/code> (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u00a0\u2014 \u043e\u0431\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 *nix\u2011\u0441\u0438\u0441\u0442\u0435\u043c):<\/p>\n<pre><code>[build]desc = \"Build for current OS\"run_linux   = [\"gcc -O2 src\/main.c -o app\"]run_macos   = [\"clang -O2 src\/main.c -o app\"]run_windows = [\"cl.exe \/O2 src\\\\main.c\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Take \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (<code>#if defined(_WIN32)<\/code> \/ <code><strong>APPLE<\/strong><\/code> \/ <code><strong>linux<\/strong><\/code>) \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<h3>\u0421\u043c\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u00a0\u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438 \u0435\u0441\u0442\u044c <code>dir<\/code>:<\/p>\n<pre><code>[frontend]desc = \"Build frontend\"dir  = \"web\"run  = [\"npm run build\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 <code>run<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u00a0\u2014 Take \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0442\u0443\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/nik251021\/LogicGrid\" rel=\"noopener noreferrer nofollow\">LogicGrid<\/a>:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 take.toml \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 LogicGrid<\/summary>\n<div class=\"spoiler__content\">\n<pre><code># TOML build configuration for the take build system.# https:\/\/github.com\/Roit-liasp\/Takedefault = \"build\"[vars]CXX          = \"g++\"STD          = \"c++20\"FLAGS        = \"-O2 -Wall -Wextra\"PROJECT      = \"LogicGridProject\"SRC_DIR      = \"src\"INCLUDE_DIR  = \"include\"BUILD_DIR    = \"build\"OUT_DIR      = \"out\"SCRIPTS_DIR  = \"scripts\"THIRD_PARTY  = \"third_party\"SOL2_DIR     = \"third_party\/sol2\"SOL2_INCLUDE = \"third_party\/sol2\/include\"SOL2_TAG     = \"v3.5.0\"SOL2_REPO    = \"https:\/\/github.com\/ThePhD\/sol2.git\"LUA_LIBS_FALLBACK  = \"-llua5.4\"SFML_LIBS_FALLBACK = \"-lsfml-graphics -lsfml-window -lsfml-system\"EXTRA_INCLUDE = \"\"EXTRA_LIB     = \"\"[deps]desc = \"Fetch third-party sources that don't ship on the system (sol2)\"run  = [  'mkdir -p ${THIRD_PARTY}',  'test -f ${SOL2_INCLUDE}\/sol\/sol.hpp || (rm -rf ${SOL2_DIR} &amp;&amp; git clone --depth 1 --branch ${SOL2_TAG} ${SOL2_REPO} ${SOL2_DIR})',][doctor]desc = \"Check that the required tools\/libraries are present\"run  = [  'command -v ${CXX} &gt;\/dev\/null || { echo \"take: ${CXX} not found\" &gt;&amp;2; exit 1; }',  'command -v git &gt;\/dev\/null || { echo \"take: git not found (needed to fetch sol2)\" &gt;&amp;2; exit 1; }',  'command -v pkg-config &gt;\/dev\/null &amp;&amp; echo \"take: pkg-config found (used to auto-detect Lua\/SFML)\" || echo \"take: warning: pkg-config not found, will fall back to plain -l flags for Lua\/SFML\" &gt;&amp;2',  'pkg-config --exists lua5.4 || pkg-config --exists lua-5.4 || pkg-config --exists lua || echo \"take: warning: no Lua 5.4 pkg-config package found, will link with ${LUA_LIBS_FALLBACK}\" &gt;&amp;2',  'pkg-config --exists sfml-graphics || echo \"take: warning: no SFML pkg-config package found, will link with ${SFML_LIBS_FALLBACK}\" &gt;&amp;2',][build]desc = \"Compile LogicGrid (auto-fetches sol2, auto-detects Lua\/SFML flags)\"deps = [\"deps\"]run  = [  'mkdir -p ${BUILD_DIR} ${OUT_DIR}',  'LUA_PKG=\"\"; for p in lua5.4 lua-5.4 lua; do pkg-config --exists \"$p\" 2&gt;\/dev\/null &amp;&amp; LUA_PKG=\"$p\" &amp;&amp; break; done; if [ -n \"$LUA_PKG\" ]; then pkg-config --cflags \"$LUA_PKG\" &gt; ${BUILD_DIR}\/.lua_cflags; pkg-config --libs \"$LUA_PKG\" &gt; ${BUILD_DIR}\/.lua_libs; else : &gt; ${BUILD_DIR}\/.lua_cflags; echo \"${LUA_LIBS_FALLBACK}\" &gt; ${BUILD_DIR}\/.lua_libs; fi',  'if pkg-config --exists sfml-graphics sfml-window sfml-system 2&gt;\/dev\/null; then pkg-config --cflags sfml-graphics sfml-window sfml-system &gt; ${BUILD_DIR}\/.sfml_cflags; pkg-config --libs sfml-graphics sfml-window sfml-system &gt; ${BUILD_DIR}\/.sfml_libs; else : &gt; ${BUILD_DIR}\/.sfml_cflags; echo \"${SFML_LIBS_FALLBACK}\" &gt; ${BUILD_DIR}\/.sfml_libs; fi',  '${CXX} -std=${STD} ${FLAGS} -I${INCLUDE_DIR} -isystem ${SOL2_INCLUDE} ${EXTRA_INCLUDE} $(cat ${BUILD_DIR}\/.lua_cflags) $(cat ${BUILD_DIR}\/.sfml_cflags) ${SRC_DIR}\/*.cpp -o ${OUT_DIR}\/${PROJECT} ${EXTRA_LIB} $(cat ${BUILD_DIR}\/.sfml_libs) $(cat ${BUILD_DIR}\/.lua_libs) -ldl',  'if [ -d ${SCRIPTS_DIR} ]; then mkdir -p ${OUT_DIR}\/${SCRIPTS_DIR}; cp -r ${SCRIPTS_DIR}\/. ${OUT_DIR}\/${SCRIPTS_DIR}\/; fi',][run]desc = \"Run LogicGrid\"dir  = \"${OUT_DIR}\"run_linux   = ['.\/${PROJECT}']run_macos   = ['.\/${PROJECT}']run_windows = ['${PROJECT}.exe'][install]desc = \"Install LogicGrid (sudo or su)\"deps = [\"build\"]run  = [  'install -d \/usr\/local\/bin',  'install -m 755 ${OUT_DIR}\/${PROJECT} \/usr\/local\/bin\/${PROJECT}',][clean]desc = \"Remove build artifacts (build\/ and out\/)\"run  = ['rm -rf ${BUILD_DIR} ${OUT_DIR}'][clean-deps]desc = \"Remove fetched third-party dependencies (third_party\/)\"run  = ['rm -rf ${THIRD_PARTY}'][distclean]desc = \"clean + clean-deps: wipe everything take fetched or built\"deps = [\"clean\", \"clean-deps\"][rebuild]desc = \"Clean and build from scratch\"deps = [\"clean\", \"build\"][test]desc = \"Build then run the resulting binary\"deps = [\"build\", \"run\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b93\/121\/5c6\/b931215c6241a7fa2eff6e6a9a5fce39.png\" width=\"1366\" height=\"768\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b93\/121\/5c6\/b931215c6241a7fa2eff6e6a9a5fce39.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b93\/121\/5c6\/b931215c6241a7fa2eff6e6a9a5fce39.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<h3>Dry\u2011run, \u0442\u0438\u0445\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u043b\u043e\u0447\u0438<\/h3>\n<ul>\n<li>\n<p><code>take -n<\/code> \/ <code>--dry-run<\/code>\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0445. \u0423\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0448\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443 (\u0441\u0432\u043e\u0435\u043c\u0443 \u0438\u043b\u0438\u00a0\u0447\u0443\u0436\u043e\u043c\u0443) \u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p><code>take -q<\/code> \/ <code>--quiet<\/code>\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0432\u044b\u0432\u043e\u0434. \u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u0447\u0435\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 <code>quiet = true<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>ignore_errors = true<\/code>\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><code>take -l<\/code> \/ <code>--list<\/code>\u00a0\u2014 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u00a0\u0438\u0445 <code>desc<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>take -f other.toml<\/code>\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e <code>take.toml<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>take -C dir<\/code>\u00a0\u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0430\u00a0\u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><code>take build -- --verbose<\/code>\u00a0\u2014 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 <code>--<\/code>, \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 <code>${ARGS}<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0432\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e tty, <code>isatty<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f), \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c <code>--no-color<\/code>.<\/p>\n<h3>\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438<\/h3>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f\u00a0\u2014 \u0432\u0435\u0441\u044c <code>main.cpp<\/code> \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0440\u0430\u0439\u043e\u043d\u0435 400\u00a0\u0441\u0442\u0440\u043e\u043a \u043d\u0430\u00a0C++17\u00a0(\u0432 \u0441\u043b\u0435\u0434\u0443\u0449\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u044f \u0434\u0443\u043c\u0430\u044e \u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430): \u0441\u0432\u043e\u0439 TOML\u2011\u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 header only \u0444\u0430\u0439\u043b, \u0430\u00a0\u0441\u0430\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u0438, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 <code>deps<\/code>, \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 <code>${...}<\/code> \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 <code>std::system()<\/code> \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u00a0\u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c <code>make<\/code>, \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>sudo make install<\/code>, \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a <code>take<\/code> \u043a\u0443\u0434\u0430 \u043d\u0438\u0431\u0443\u0434\u044c \u0432 <code>$PATH<\/code>.<\/p>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <strong>Take<\/strong> \u0438\u0434\u0435\u0442 \u043e\u0442 <strong>Make, <\/strong>\u043d\u043e\u00a0\u0432\u043c\u0435\u0441\u0442\u043e<strong> M <\/strong>\u0441\u0442\u043e\u0438\u0442<strong> T <\/strong>\u0447\u0442\u043e\u00a0\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442<strong> Toml.<\/strong> \u00af\\_(\u30c4)_\/\u00af<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u043b\u043e\u0434\u043e\u0439 (\u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0435\u0440\u0441\u0438\u044f 0.0.4) \u0438 \u043d\u0435\u00a0\u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430\u00a0\u0437\u0430\u043c\u0435\u043d\u0443 Make \u0438\u043b\u0438\u00a0CMake \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f\u00a0\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 C\/C++ \u0448\u0442\u0443\u043a \u0438 personal \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0431\u0435\u0437\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Makefile \u0438 \u0431\u0435\u0437\u00a0\u0432\u0435\u0441\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e CMake. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 issues, PR \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <a href=\"https:\/\/github.com\/Roit-liasp\/Take\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Roit\u2011liasp\/Take<\/a><\/p>\n<p>\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f: BSD 2-Clause.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1058644\/\">https:\/\/habr.com\/ru\/articles\/1058644\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0438\u00a0\u2014 Take (C++17, \u0431\u0435\u0437\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0435\u0441\u043b\u0438 \u043d\u0435\u00a0\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d header only TOML\u2011\u043f\u0430\u0440\u0441\u0435\u0440). \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c Make (\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0446\u0435\u043b\u0438, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438, \u0448\u0435\u043b\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u044b), \u043d\u043e\u00a0\u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0442\u0430\u0431\u044b, $@\/$&lt; \u0438 \u043f\u0440\u043e\u0447\u0443\u044e \u043c\u0430\u0433\u0438\u044e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Makefile, \u0430\u00a0\u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 .toml\u2011\u0444\u0430\u0439\u043b.\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:default = &#171;build&#187;[vars]CXX   = &#171;gcc&#187;FLAGS = &#171;-O2 -Wall -Wextra&#187;OUT   = &#171;msin&#187;[build]desc = &#171;Build msin&#187;run  = [  &#171;${CXX} ${FLAGS} -Iinclude src\/main.c src\/functions.c -o ${OUT}&#187;,][install]desc = &#171;Install msin (sudo or su)&#187;run  = [  &#171;install -d \/usr\/local\/bin&#187;,  &#171;install -m 755 ${OUT} \/usr\/local\/bin\/msin&#187;,][clean]desc = &#171;Clean build&#187;run  = [&#171;rm -f ${OUT}&#187;]\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044f (\u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 [vars])\u00a0\u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u00ab\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00bb: \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 take &lt;\u0438\u043c\u044f&gt;. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, take build \u0441\u043e\u0431\u0435\u0440\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u0430 take install\u00a0\u2014 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0432 \/usr\/local\/bin.\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u0412 [vars] \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 ${VAR} \u0432\u00a0\u043b\u044e\u0431\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 run. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u00a0\u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 DSL \u0434\u043b\u044f\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u00a0\u0433\u043e\u043b\u043e\u0432\u0435, \u0442\u0435\u043c\u00a0\u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433.\u041a\u0440\u043e\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, Take \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445:${TAKE_FUNC}\u00a0\u2014 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438;${TAKE_DIR}\u00a0\u2014 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 take.toml;${ARGS}\u00a0\u2014 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u043f\u043e\u0441\u043b\u0435 &#8212; \u0432\u00a0\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.\u041f\u043b\u044e\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 ${env:VARNAME}.\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0435\u0440\u0435\u0437 deps:[build]desc = &#171;Build msin&#187;run  = [&#171;${CXX} ${FLAGS} -Iinclude src\/main.c -o ${OUT}&#187;][install]desc = &#171;Install after build&#187;deps = [&#171;build&#187;]run  = [&#171;install -m 755 ${OUT} \/usr\/local\/bin\/msin&#187;]take install \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 build, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u00a0\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u043e\u0432\u00a0\u2014 \u0435\u0441\u043b\u0438 \u0433\u0434\u0435\u2011\u0442\u043e \u0432\u00a0\u0446\u0435\u043f\u043e\u0447\u043a\u0435 deps \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b, Take \u0441\u0440\u0430\u0437\u0443 \u0443\u043f\u0430\u0434\u0451\u0442 \u0441\u00a0\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0443\u0445\u043e\u0434\u0430 \u0432\u00a0\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e.\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u00a0\u0440\u0443\u0447\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438:roit@Debian:\/sdisk\/p\/progect\/p\/msin$ take==&gt; take build \u2014 Build msin  $ gcc -O2 -Wall -Wextra -Iinclude src\/main.c src\/functions.c -o msinsrc\/main.c: In function \u2018handle_encrypt\u2019:src\/main.c:48:55: warning: unused parameter \u2018filename\u2019 [-Wunused-parameter]   48 | void handle_encrypt(const char* password, const char* filename) {      |                                           ~~~~~~~~~~~~^~~~~~~~^Ctake: error: [build] The command finished with code 1: gcc -O2 -Wall -Wextra -Iinclude src\/main.c src\/functions.c -o msinroit@Debian:\/sdisk\/p\/progect\/p\/msin$ \u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u041e\u0421\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u2011\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043d\u0430\u00a0Linux\/macOS\/Windows, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e run \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u0442\u044c run_linux, run_macos, run_windows \u0438\u043b\u0438 run_unix (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439\u00a0\u2014 \u043e\u0431\u0449\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f\u00a0\u0432\u0441\u0435\u0445 *nix\u2011\u0441\u0438\u0441\u0442\u0435\u043c):[build]desc = &#171;Build for current OS&#187;run_linux   = [&#171;gcc -O2 src\/main.c -o app&#187;]run_macos   = [&#171;clang -O2 src\/main.c -o app&#187;]run_windows = [&#171;cl.exe \/O2 src\\\\main.c&#187;]Take \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u043d\u0430\u00a0\u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (#if defined(_WIN32) \/ APPLE \/ linux) \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u043c\u0430\u043d\u0434.\u0421\u043c\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\u0414\u043b\u044f\u00a0\u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u00a0\u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438 \u0435\u0441\u0442\u044c dir:[frontend]desc = &#171;Build frontend&#187;dir  = &#171;web&#187;run  = [&#171;npm run build&#187;]\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 run \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0430\u00a0\u043f\u043e\u0441\u043b\u0435\u00a0\u2014 Take \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0442\u0443\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430\u00a0\u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d.\u0414\u043b\u044f\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 LogicGrid:\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 take.toml \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430 LogicGrid# TOML build configuration for the take build system.# https:\/\/github.com\/Roit-liasp\/Takedefault = &#171;build&#187;[vars]CXX          = &#171;g++&#187;STD          = &#171;c++20&#8243;FLAGS        = &#171;-O2 -Wall -Wextra&#187;PROJECT      = &#171;LogicGridProject&#187;SRC_DIR      = &#171;src&#187;INCLUDE_DIR  = &#171;include&#187;BUILD_DIR    = &#171;build&#187;OUT_DIR      = &#171;out&#187;SCRIPTS_DIR  = &#171;scripts&#187;THIRD_PARTY  = &#171;third_party&#187;SOL2_DIR     = &#171;third_party\/sol2&#8243;SOL2_INCLUDE = &#171;third_party\/sol2\/include&#187;SOL2_TAG     = &#171;v3.5.0&#8243;SOL2_REPO    = &#171;https:\/\/github.com\/ThePhD\/sol2.git&#187;LUA_LIBS_FALLBACK  = &#171;-llua5.4&#8243;SFML_LIBS_FALLBACK = &#171;-lsfml-graphics -lsfml-window -lsfml-system&#187;EXTRA_INCLUDE = &#171;&#187;EXTRA_LIB     = &#171;&#187;[deps]desc = &#171;Fetch third-party sources that don&#8217;t ship on the system (sol2)&#187;run  = [  &#8216;mkdir -p ${THIRD_PARTY}&#8217;,  &#8216;test -f ${SOL2_INCLUDE}\/sol\/sol.hpp || (rm -rf ${SOL2_DIR} &amp;&amp; git clone &#8212;depth 1 &#8212;branch ${SOL2_TAG} ${SOL2_REPO} ${SOL2_DIR})&#8217;,][doctor]desc = &#171;Check that the required tools\/libraries are present&#187;run  = [  &#8216;command -v ${CXX} &gt;\/dev\/null || { echo &#171;take: ${CXX} not found&#187; &gt;&amp;2; exit 1; }&#8217;,  &#8216;command -v git &gt;\/dev\/null || { echo &#171;take: git not found (needed to fetch sol2)&#187; &gt;&amp;2; exit 1; }&#8217;,  &#8216;command -v pkg-config &gt;\/dev\/null &amp;&amp; echo &#171;take: pkg-config found (used to auto-detect Lua\/SFML)&#187; || echo &#171;take: warning: pkg-config not found, will fall back to plain -l flags for Lua\/SFML&#187; &gt;&amp;2&#8217;,  &#8216;pkg-config &#8212;exists lua5.4 || pkg-config &#8212;exists lua-5.4 || pkg-config &#8212;exists lua || echo &#171;take: warning: no Lua 5.4 pkg-config package found, will link with ${LUA_LIBS_FALLBACK}&#187; &gt;&amp;2&#8217;,  &#8216;pkg-config &#8212;exists sfml-graphics || echo &#171;take: warning: no SFML pkg-config package found, will link with ${SFML_LIBS_FALLBACK}&#187; &gt;&amp;2&#8217;,][build]desc = &#171;Compile LogicGrid (auto-fetches sol2, auto-detects Lua\/SFML flags)&#187;deps = [&#171;deps&#187;]run  = [  &#8216;mkdir -p ${BUILD_DIR} ${OUT_DIR}&#8217;,  &#8216;LUA_PKG=&#187;&#187;; for p in lua5.4 lua-5.4 lua; do pkg-config &#8212;exists &#171;$p&#187; 2&gt;\/dev\/null &amp;&amp; LUA_PKG=&#187;$p&#187; &amp;&amp; break; done; if [ -n &#171;$LUA_PKG&#187; ]; then pkg-config &#8212;cflags &#171;$LUA_PKG&#187; &gt; ${BUILD_DIR}\/.lua_cflags; pkg-config &#8212;libs &#171;$LUA_PKG&#187; &gt; ${BUILD_DIR}\/.lua_libs; else : &gt; ${BUILD_DIR}\/.lua_cflags; echo &#171;${LUA_LIBS_FALLBACK}&#187; &gt; ${BUILD_DIR}\/.lua_libs; fi&#8217;,  &#8216;if pkg-config &#8212;exists sfml-graphics sfml-window sfml-system 2&gt;\/dev\/null; then pkg-config &#8212;cflags sfml-graphics sfml-window sfml-system &gt; ${BUILD_DIR}\/.sfml_cflags; pkg-config &#8212;libs sfml-graphics sfml-window sfml-system &gt; ${BUILD_DIR}\/.sfml_libs; else : &gt; ${BUILD_DIR}\/.sfml_cflags; echo &#171;${SFML_LIBS_FALLBACK}&#187; &gt; ${BUILD_DIR}\/.sfml_libs; fi&#8217;,  &#8216;${CXX} -std=${STD} ${FLAGS} -I${INCLUDE_DIR} -isystem ${SOL2_INCLUDE} ${EXTRA_INCLUDE} $(cat ${BUILD_DIR}\/.lua_cflags) $(cat ${BUILD_DIR}\/.sfml_cflags) ${SRC_DIR}\/*.cpp -o ${OUT_DIR}\/${PROJECT} ${EXTRA_LIB} $(cat ${BUILD_DIR}\/.sfml_libs) $(cat ${BUILD_DIR}\/.lua_libs) -ldl&#8217;,  &#8216;if [ -d ${SCRIPTS_DIR} ]; then mkdir -p ${OUT_DIR}\/${SCRIPTS_DIR}; cp -r ${SCRIPTS_DIR}\/. ${OUT_DIR}\/${SCRIPTS_DIR}\/; fi&#8217;,][run]desc = &#171;Run LogicGrid&#187;dir  = &#171;${OUT_DIR}&#187;run_linux   = [&#8216;.\/${PROJECT}&#8217;]run_macos   = [&#8216;.\/${PROJECT}&#8217;]run_windows = [&#8216;${PROJECT}.exe&#8217;][install]desc = &#171;Install LogicGrid (sudo or su)&#187;deps = [&#171;build&#187;]run  = [  &#8216;install -d \/usr\/local\/bin&#8217;,  &#8216;install -m 755 ${OUT_DIR}\/${PROJECT} \/usr\/local\/bin\/${PROJECT}&#8217;,][clean]desc = &#171;Remove build artifacts (build\/ and out\/)&#187;run  = [&#8216;rm -rf ${BUILD_DIR} ${OUT_DIR}&#8217;][clean-deps]desc = &#171;Remove fetched third-party dependencies (third_party\/)&#187;run  = [&#8216;rm -rf ${THIRD_PARTY}&#8217;][distclean]desc = &#171;clean + clean-deps: wipe everything take fetched or built&#187;deps = [&#171;clean&#187;, &#171;clean-deps&#187;][rebuild]desc = &#171;Clean and build from scratch&#187;deps = [&#171;clean&#187;, &#171;build&#187;][test]desc = &#171;Build then run the resulting binary&#187;deps = [&#171;build&#187;, &#171;run&#187;]Dry\u2011run, \u0442\u0438\u0445\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u043b\u043e\u0447\u0438take -n \/ &#8212;dry-run\u00a0\u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0445. \u0423\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0448\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443 (\u0441\u0432\u043e\u0435\u043c\u0443 \u0438\u043b\u0438\u00a0\u0447\u0443\u0436\u043e\u043c\u0443) \u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442.take -q \/ &#8212;quiet\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u0432\u044b\u0432\u043e\u0434. \u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u043e\u0447\u0435\u0447\u043d\u043e \u0434\u043b\u044f\u00a0\u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 quiet = true.ignore_errors = true\u00a0\u2014 \u043d\u0435\u00a0\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0430 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u0434.take -l \/ &#8212;list\u00a0\u2014 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u00a0\u0438\u0445 desc.take -f other.toml\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e take.toml.take -C dir\u00a0\u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0430\u00a0\u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e.take build &#8212; &#8212;verbose\u00a0\u2014 \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 &#8212;, \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 ${ARGS} \u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434.\u0412\u044b\u0432\u043e\u0434 \u0432\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e tty, isatty \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f), \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c &#8212;no-color.\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0440\u043e\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f\u00a0\u2014 \u0432\u0435\u0441\u044c main.cpp \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0440\u0430\u0439\u043e\u043d\u0435 400\u00a0\u0441\u0442\u0440\u043e\u043a \u043d\u0430\u00a0C++17\u00a0(\u0432 \u0441\u043b\u0435\u0434\u0443\u0449\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 \u044f \u0434\u0443\u043c\u0430\u044e \u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f\u00a0\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430): \u0441\u0432\u043e\u0439 TOML\u2011\u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 header only \u0444\u0430\u0439\u043b, \u0430\u00a0\u0441\u0430\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u0438, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 deps, \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 ${&#8230;} \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 std::system() \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u00a0\u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c make, \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 sudo make install, \u0438\u043b\u0438\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0430\u0434\u0451\u0442\u0441\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a take \u043a\u0443\u0434\u0430 \u043d\u0438\u0431\u0443\u0434\u044c \u0432 $PATH.\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Take \u0438\u0434\u0435\u0442 \u043e\u0442 Make, \u043d\u043e\u00a0\u0432\u043c\u0435\u0441\u0442\u043e M \u0441\u0442\u043e\u0438\u0442 T \u0447\u0442\u043e\u00a0\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 Toml. \u00af\\_(\u30c4)_\/\u00af\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043e\u043b\u043e\u0434\u043e\u0439 (\u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0435\u0440\u0441\u0438\u044f 0.0.4) \u0438 \u043d\u0435\u00a0\u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430\u00a0\u0437\u0430\u043c\u0435\u043d\u0443 Make \u0438\u043b\u0438\u00a0CMake \u0432\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\u00a0\u2014 \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f\u00a0\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 C\/C++ \u0448\u0442\u0443\u043a \u0438 personal \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0433\u0434\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0431\u0435\u0437\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 Makefile \u0438 \u0431\u0435\u0437\u00a0\u0432\u0435\u0441\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e CMake. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 issues, PR \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438.\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: https:\/\/github.com\/Roit\u2011liasp\/Take\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f: BSD 2-Clause.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1058644\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-487118","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487118","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=487118"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487118\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=487118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=487118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=487118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}