{"id":12417,"date":"2021-07-10T11:34:24","date_gmt":"2021-07-10T14:34:24","guid":{"rendered":"http:\/\/maurinsoft.com.br\/?p=12417"},"modified":"2023-08-19T09:06:10","modified_gmt":"2023-08-19T12:06:10","slug":"montagem-de-codigo-em-c-com-ninja","status":"publish","type":"post","link":"https:\/\/maurinsoft.com.br\/wp\/montagem-de-codigo-em-c-com-ninja\/","title":{"rendered":"Montagem de c\u00f3digo em C com Ninja"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Defini\u00e7\u00e3o<\/h2>\n\n\n\n<p>Ninja \u00e9 um pequeno conjunto de ferramentas, desenvolvido por Evan Martin, um empregado da Google. Ninja foi usado em diversas constru\u00e7\u00f5es de aplica\u00e7\u00f5es. <\/p>\n\n\n\n<p>Entre suas vantagens est\u00e3o a facilidade de montagem de aplica\u00e7\u00e3o, a velocidade e rapidez.<\/p>\n\n\n\n<p>Outra vantagem \u00e9 a capacidade de construir aplica\u00e7\u00f5es em multiplos SOs. (Windows, Linux, MacOS).<\/p>\n\n\n\n<p><strong>Refer\u00eancia:<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-right\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Ninja_(build_system)\">https:\/\/en.wikipedia.org\/wiki\/Ninja_(build_system)<\/a><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2021\/07\/ninja.png\" alt=\"\" class=\"wp-image-12419\" style=\"width:177px;height:177px\" width=\"177\" height=\"177\"\/><figcaption class=\"wp-element-caption\">NINJA<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"> Constru\u00e7\u00e3o<\/h2>\n\n\n\n<p>Iremos apresentar um pequeno projeto constru\u00eddo com NINJA.<\/p>\n\n\n\n<p>O srvOuve \u00e9 um projeto que visa integrar o <strong>CMU sphinx<\/strong>, estaremos construindo uma build com ninja.<\/p>\n\n\n\n<p>Primeiramente precisamos criar o arquivo<strong> CMakeLists.txt<\/strong> , que far\u00e1 a magica acontecer.<\/p>\n\n\n\n<p>Criamos o arquivo conforme aparece no fragmento abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cmake_minimum_required (VERSION 3.8)\n\n#Define o projeto\nproject(srvOuve VERSION 1.0)\n\n#Diretorios de Include\ninclude_directories(\t   \"\/usr\/local\/include\/pocketsphinx\"\n\t\t\t\t\t\t   \"\/usr\/local\/include\/sphinxbase\"\n                          )\n\nset(CMAKE_CXX_STANDARD 14)\n\nadd_executable(srvOuve ouve.cpp)<\/code><\/pre>\n\n\n\n<p>Agora precisaremos dizer ao sistema para gerar os arquivos do ninja, para tanto chamamos o cmake, conforme a sintaxe abaixo:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>$ cmake -G Ninja<\/p>\n<cite>Execu\u00e7\u00e3o na console<\/cite><\/blockquote>\n\n\n\n<p>Com este passo o cmake criar\u00e1 dois arquivos:<\/p>\n\n\n\n<p>build.ninja &#8211; Este arquivo contem as configura\u00e7\u00f5es de compila\u00e7\u00e3o (build)<\/p>\n\n\n\n<p>O <strong>build.ninja<\/strong> conter\u00e1 as regras de constru\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># CMAKE generated file: DO NOT EDIT!\n# Generated by \"Ninja\" Generator, CMake Version 3.10\n\n# This file contains all the build statements describing the\n# compilation DAG.\n\n# =============================================================================\n# Write statements declared in CMakeLists.txt:\n#\n# Which is the root file.\n# =============================================================================\n\n# =============================================================================\n# Project: srvOuve\n# Configuration:\n# =============================================================================\n\n#############################################\n# Minimal version of Ninja required by this file\n\nninja_required_version = 1.5\n\n# =============================================================================\n# Include auxiliary files.\n\n\n#############################################\n# Include rules file.\n\ninclude rules.ninja\n\n\n#############################################\n# Utility command for rebuild_cache\n\nbuild CMakeFiles\/rebuild_cache.util: CUSTOM_COMMAND\n  COMMAND = cd \/home\/maurinsoft\/projetos\/srvOuve\/srv &amp;&amp; \/usr\/bin\/cmake -H\/home\/maurinsoft\/projetos\/srvOuve\/srv -B\/home\/maurinsoft\/projetos\/srvOuve\/srv\n  DESC = Running CMake to regenerate build system...\n  pool = console\n  restat = 1\nbuild rebuild_cache: phony CMakeFiles\/rebuild_cache.util\n# =============================================================================\n# Object build statements for EXECUTABLE target srvOuve\n\n\n#############################################\n# Order-only phony target for srvOuve\n\nbuild cmake_object_order_depends_target_srvOuve: phony\nbuild CMakeFiles\/srvOuve.dir\/ouve.cpp.o: CXX_COMPILER__srvOuve ouve.cpp || cmake_object_order_depends_target_srvOuve\n  DEP_FILE = CMakeFiles\/srvOuve.dir\/ouve.cpp.o.d\n  FLAGS = -std=gnu++14\n  INCLUDES = -I\/usr\/local\/include\/pocketsphinx -I\/usr\/local\/include\/sphinxbase\n  OBJECT_DIR = CMakeFiles\/srvOuve.dir\n  OBJECT_FILE_DIR = CMakeFiles\/srvOuve.dir\n\n# =============================================================================\n# Link build statements for EXECUTABLE target srvOuve\n\n\n#############################################\n# Link the executable srvOuve\n\nbuild srvOuve: CXX_EXECUTABLE_LINKER__srvOuve CMakeFiles\/srvOuve.dir\/ouve.cpp.o\n  OBJECT_DIR = CMakeFiles\/srvOuve.dir\n  POST_BUILD = :\n  PRE_LINK = :\n  TARGET_FILE = srvOuve\n  TARGET_PDB = srvOuve.dbg\n\n#############################################\n# Utility command for edit_cache\n\nbuild CMakeFiles\/edit_cache.util: CUSTOM_COMMAND\n  COMMAND = cd \/home\/maurinsoft\/projetos\/srvOuve\/srv &amp;&amp; \/usr\/bin\/cmake-gui -H\/home\/maurinsoft\/projetos\/srvOuve\/srv -B\/home\/maurinsoft\/projetos\/srvOuve\/srv\n  DESC = Running CMake cache editor...\n  pool = console\n  restat = 1\nbuild edit_cache: phony CMakeFiles\/edit_cache.util\n# =============================================================================\n# Target aliases.\n\n# =============================================================================\n# Folder targets.\n\n# =============================================================================\n# =============================================================================\n# Built-in targets\n\n\n#############################################\n# The main all target.\n\nbuild all: phony srvOuve\n\n#############################################\n# Make the all target the default.\n\ndefault all\n\n#############################################\n# Re-run CMake if any of its inputs changed.\n\nbuild build.ninja: RERUN_CMAKE | \/usr\/share\/cmake-3.10\/Modules\/CMakeCInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeCXXInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeCommonLanguageInclude.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeGenericSystem.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeLanguageInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeSystemSpecificInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeSystemSpecificInitialize.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/CMakeCommonCompilerMacros.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU-C.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU-CXX.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU-C.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU-CXX.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/UnixPaths.cmake CMakeCache.txt CMakeFiles\/3.10.2\/CMakeCCompiler.cmake CMakeFiles\/3.10.2\/CMakeCXXCompiler.cmake CMakeFiles\/3.10.2\/CMakeSystem.cmake CMakeLists.txt\n  pool = console\n\n#############################################\n# A missing CMake input file is not an error.\n\nbuild \/usr\/share\/cmake-3.10\/Modules\/CMakeCInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeCXXInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeCommonLanguageInclude.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeGenericSystem.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeLanguageInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeSystemSpecificInformation.cmake \/usr\/share\/cmake-3.10\/Modules\/CMakeSystemSpecificInitialize.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/CMakeCommonCompilerMacros.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU-C.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU-CXX.cmake \/usr\/share\/cmake-3.10\/Modules\/Compiler\/GNU.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU-C.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU-CXX.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux-GNU.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/Linux.cmake \/usr\/share\/cmake-3.10\/Modules\/Platform\/UnixPaths.cmake CMakeCache.txt CMakeFiles\/3.10.2\/CMakeCCompiler.cmake CMakeFiles\/3.10.2\/CMakeCXXCompiler.cmake CMakeFiles\/3.10.2\/CMakeSystem.cmake CMakeLists.txt: phony\n\n#############################################\n# Clean all the built files.\n\nbuild clean: CLEAN\n\n#############################################\n# Print all primary targets available.\n\nbuild help: HELP\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\"><\/pre>\n\n\n\n<p>O cmake tambem cria o arquivo rules.ninja, respons\u00e1vel pelas regras de compila\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># CMAKE generated file: DO NOT EDIT!\n# Generated by \"Ninja\" Generator, CMake Version 3.10\n\n# This file contains all the rules used to get the outputs files\n# built from the input files.\n# It is included in the main 'build.ninja'.\n\n# =============================================================================\n# Project: srvOuve\n# Configuration:\n# =============================================================================\n# =============================================================================\n\n#############################################\n# Rule for running custom commands.\n\nrule CUSTOM_COMMAND\n  command = $COMMAND\n  description = $DESC\n\n\n#############################################\n# Rule for compiling CXX files.\n\nrule CXX_COMPILER__srvOuve\n  depfile = $DEP_FILE\n  deps = gcc\n  command = \/usr\/bin\/c++  $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in\n  description = Building CXX object $out\n\n\n#############################################\n# Rule for linking CXX executable.\n\nrule CXX_EXECUTABLE_LINKER__srvOuve\n  command = $PRE_LINK &amp;&amp; \/usr\/bin\/c++  $FLAGS  $LINK_FLAGS $in  -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES &amp;&amp; $POST_BUILD\n  description = Linking CXX executable $TARGET_FILE\n  restat = $RESTAT\n\n\n#############################################\n# Rule for re-running cmake.\n\nrule RERUN_CMAKE\n  command = \/usr\/bin\/cmake -H\/home\/maurinsoft\/projetos\/srvOuve\/srv -B\/home\/maurinsoft\/projetos\/srvOuve\/srv\n  description = Re-running CMake...\n  generator = 1\n\n\n#############################################\n# Rule for cleaning all built files.\n\nrule CLEAN\n  command = \/usr\/bin\/ninja -t clean\n  description = Cleaning all built files...\n\n\n#############################################\n# Rule for printing all primary targets available.\n\nrule HELP\n  command = \/usr\/bin\/ninja -t targets\n  description = All primary targets available:\n\n<\/code><\/pre>\n\n\n\n<p>Para processar o ninja precisamos fazer uma pequena mudan\u00e7a, alterar as extens\u00f5es de .c para .cpp, para que o sistema identifique que se trata de compilador C.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Incluindo depend\u00eancias<\/h2>\n\n\n\n<p>Para incluir diretorios para Include, basta incluir a linha<\/p>\n\n\n\n<p>Diret\u00f3rios de Include<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>include_directories( &#8220;\/usr\/local\/include\/pocketsphinx&#8221;<br>&#8220;\/usr\/local\/include\/sphinxbase&#8221;<br>)<\/p>\n<cite>Include adicional<\/cite><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Gerando bin\u00e1rio<\/h2>\n\n\n\n<p>Por fim precisaremos dar o comando ninja para compilar os scripts.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>$ ninja<\/p>\n<\/blockquote>\n\n\n\n<p>Pronto voc\u00ea montou um Montador em Ninja! Parab\u00e9ns!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Defini\u00e7\u00e3o Ninja \u00e9 um pequeno conjunto de ferramentas, desenvolvido por Evan Martin, um empregado da Google. Ninja foi usado em diversas constru\u00e7\u00f5es de aplica\u00e7\u00f5es. Entre suas vantagens est\u00e3o a facilidade de montagem de aplica\u00e7\u00e3o, a velocidade e rapidez. Outra vantagem \u00e9 a capacidade de construir aplica\u00e7\u00f5es em multiplos SOs. (Windows, Linux, MacOS). Refer\u00eancia: https:\/\/en.wikipedia.org\/wiki\/Ninja_(build_system) Constru\u00e7\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":12421,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61,496,39],"tags":[116,130,291],"class_list":["post-12417","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-cmusphinx","category-ia","tag-c-2","tag-cmake","tag-ninja"],"_links":{"self":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/12417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/comments?post=12417"}],"version-history":[{"count":1,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/12417\/revisions"}],"predecessor-version":[{"id":23713,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/12417\/revisions\/23713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/media?parent=12417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/categories?post=12417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/tags?post=12417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}