{"id":3420,"date":"2025-10-06T16:12:05","date_gmt":"2025-10-06T14:12:05","guid":{"rendered":"https:\/\/tecnologia.euroinnova.com\/automatiza-tus-tareas-con-makefile-guia-esencial-para-proyectos-multiplataforma\/"},"modified":"2025-10-07T14:49:34","modified_gmt":"2025-10-07T12:49:34","slug":"automatiza-tus-tareas-con-makefile","status":"publish","type":"post","link":"https:\/\/tecnologia.euroinnova.com\/fr\/automatiza-tus-tareas-con-makefile","title":{"rendered":"Automatisez vos t\u00e2ches avec Makefile : Guide essentiel pour les projets multiplateformes"},"content":{"rendered":"<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Makefile es una herramienta cl\u00e1sica y potente que permite automatizar tareas repetitivas dentro de proyectos de software. Aunque naci\u00f3 en el mundo del desarrollo en C, sigue siendo ampliamente utilizada hoy en d\u00eda en entornos modernos, gracias a su simplicidad y versatilidad.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>En esta gu\u00eda descubrir\u00e1s c\u00f3mo aprovechar Makefile para definir comandos reutilizables, mantener orden en tus proyectos multiplataforma y mejorar la productividad sin depender de herramientas externas complejas.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"que-es-makefile-y-para-que-sirve\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Qu\u00e9 es Makefile y para qu\u00e9 sirve<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>A&nbsp;<\/span><span style=\"font-family:Consolas;\">Makefile<\/span><span> es un archivo de texto que contiene reglas y comandos que se ejecutan de forma autom\u00e1tica al invocar el comando&nbsp;<\/span><span style=\"font-family:Consolas;\">make<\/span><span>. Estas reglas suelen usarse para compilar programas, pero tambi\u00e9n pueden automatizar cualquier tarea del desarrollo: limpiar archivos, ejecutar tests, construir contenedores, copiar recursos, etc.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Al usar&nbsp;<\/span><span style=\"font-family:Consolas;\">make<\/span><span>, puedes estandarizar y simplificar el proceso de desarrollo, evitando repetir comandos largos y propensos a errores. Su funcionamiento se basa en un sistema de dependencias: cada tarea se ejecuta solo si sus archivos han cambiado, lo que lo hace eficiente y r\u00e1pido.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"ventajas-de-usar-makefile-en-tus-proyectos\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Ventajas de usar Makefile en tus proyectos<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Integrar Makefile en tus flujos de trabajo aporta m\u00faltiples beneficios, especialmente en proyectos colaborativos o que deben ejecutarse en diferentes sistemas operativos.<\/span><o_p><\/o_p><\/p>\n<ul style=\"list-style-type:disc;\">\n<li style=\"margin-bottom:12.0pt;margin-left:36.0pt;margin-right:0cm;margin-top:12.0pt;\"><span><strong>Ahorro de tiempo y errores<\/strong>: Los comandos habituales (compilar, formatear, testear, limpiar) se encapsulan en reglas reutilizables, lo que reduce la posibilidad de cometer errores al escribirlos manualmente y ahorra tiempo en tareas repetitivas. Un&nbsp;<\/span><span style=\"font-family:Consolas;\">make test<\/span><span>, por ejemplo, puede ejecutar m\u00faltiples validaciones sin necesidad de recordar su sintaxis exacta.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:12.0pt;margin-left:36.0pt;margin-right:0cm;margin-top:12.0pt;\"><span><strong>Portabilidad y estandarizaci\u00f3n<\/strong>: Un \u00fanico Makefile puede ejecutarse sin cambios en diferentes entornos (Linux, macOS, WSL), lo que facilita el trabajo en equipo y la continuidad entre desarrolladores. Adem\u00e1s, act\u00faa como una documentaci\u00f3n viva de las tareas disponibles en el proyecto, reduciendo la dependencia de instrucciones externas.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:12.0pt;margin-left:36.0pt;margin-right:0cm;margin-top:12.0pt;\"><span><strong>Facilidad de mantenimiento<\/strong>: Centralizar todas las tareas en un Makefile permite modificar f\u00e1cilmente los flujos de trabajo a medida que el proyecto evoluciona. En lugar de actualizar scripts dispersos o comandos en la documentaci\u00f3n, solo necesitas modificar las reglas en un \u00fanico archivo.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:12.0pt;margin-left:36.0pt;margin-right:0cm;margin-top:12.0pt;\"><span><strong>Integraci\u00f3n con CI\/CD<\/strong>: Muchas plataformas de integraci\u00f3n continua (CI), como GitHub Actions, GitLab CI o Jenkins, pueden ejecutar directamente tareas definidas en un Makefile, lo que simplifica la configuraci\u00f3n de pipelines. Adem\u00e1s, facilita la ejecuci\u00f3n local de los mismos pasos definidos para el despliegue autom\u00e1tico.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:12.0pt;margin-left:36.0pt;margin-right:0cm;margin-top:12.0pt;\"><span><strong>Independencia de herramientas externas<\/strong>: A diferencia de otros gestores de tareas como&nbsp;<\/span><span style=\"font-family:Consolas;\">npm scripts<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">Rake<\/span><span> o&nbsp;<\/span><span style=\"font-family:Consolas;\">Invoke<\/span><span>, Makefile no requiere instalar dependencias adicionales. Viene preinstalado en la mayor\u00eda de entornos Unix y es muy liviano, lo que lo convierte en una soluci\u00f3n accesible y robusta para todo tipo de proyectos.<o_p><\/o_p><\/span><\/li>\n<\/ul>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"estructura-basica-de-un-makefile\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Estructura b\u00e1sica de un Makefile<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Un Makefile est\u00e1 compuesto por reglas que definen qu\u00e9 debe hacerse y cu\u00e1ndo. Cada regla tiene un objetivo, una lista de dependencias y uno o m\u00e1s comandos que se ejecutan si las dependencias est\u00e1n actualizadas o han cambiado.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>La estructura general de una regla es la siguiente:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">objetivo: dependencias<\/span><br \/><span style=\"font-family:Consolas;\">&lt;TAB&gt;comando_1<\/span><br \/><span style=\"font-family:Consolas;\">&lt;TAB&gt;comando_2<\/span><\/p>\n<p><span>En este esquema:<\/span><o_p><\/o_p><\/p>\n<ul style=\"list-style-type:disc;\">\n<li style=\"margin-bottom:0cm;\"><span style=\"font-family:Consolas;\">objetivo<\/span><span> es el nombre de la tarea o archivo que queremos generar.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span style=\"font-family:Consolas;\">dependencias<\/span><span> son los archivos de los que depende ese objetivo.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Los comandos (que deben ir precedidos por tabulaci\u00f3n, no espacios) se ejecutan solo si alguna dependencia ha cambiado.<o_p><\/o_p><\/span><\/li>\n<\/ul>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Este modelo no solo permite automatizar compilaciones, sino tambi\u00e9n tareas personalizadas como formateo, pruebas o despliegue, lo que hace que Makefile sea \u00fatil incluso fuera del \u00e1mbito de C o C++.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"estructura-basica-de-un-makefile\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Estructura b\u00e1sica de un Makefile<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Un Makefile se compone de una serie de reglas que definen tareas automatizadas. Cada regla sigue una estructura est\u00e1ndar: un nombre de tarea (target), una lista opcional de dependencias y uno o varios comandos que se ejecutan cuando se invoca dicha tarea.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"sintaxis-general\"><span><strong>Sintaxis general<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>La estructura b\u00e1sica de una regla en Makefile es la siguiente:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">target: dependencias<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; &lt;tabulaci\u00f3n&gt;comando<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Cada comando debe ir precedido por una tabulaci\u00f3n (no espacios), ya que Make distingue entre ambos. Es com\u00fan que un proyecto tenga tareas como&nbsp;<\/span><span style=\"font-family:Consolas;\">build<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">test<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">clean<\/span><span> o&nbsp;<\/span><span style=\"font-family:Consolas;\">run<\/span><span>, definidas de esta manera.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"ejemplo-simple\"><span><strong>Ejemplo simple<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Un ejemplo b\u00e1sico para automatizar la compilaci\u00f3n de un archivo en C podr\u00eda verse as\u00ed:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">all: programa<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">programa: main.c<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; gcc -o programa main.c<\/span><br \/><span style=\"font-family:Consolas;\">clean:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; rm -f programa<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Este Makefile permite compilar el programa con solo ejecutar&nbsp;<\/span><span style=\"font-family:Consolas;\">make<\/span><span>, ya que&nbsp;<\/span><span style=\"font-family:Consolas;\">all<\/span><span> es la primera regla definida y, por tanto, se ejecuta por defecto.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"variables-y-comentarios-en-makefile\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Variables y comentarios en Makefile<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Para mantener tus Makefiles limpios y reutilizables, puedes definir variables y a\u00f1adir comentarios explicativos. Las variables te permiten centralizar rutas, nombres de archivos u opciones de compilaci\u00f3n que se usan en varias reglas.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"como-definir-y-usar-variables\"><span><strong>C\u00f3mo definir y usar variables<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Las variables en Makefile se definen con el signo igual (<\/span><span style=\"font-family:Consolas;\">=<\/span><span>) y se invocan usando&nbsp;<\/span><span style=\"font-family:Consolas;\">$(nombre_variable)<\/span><span>. Esto permite modificar f\u00e1cilmente configuraciones sin tocar cada regla por separado.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">CC = gcc<\/span><br \/><span style=\"font-family:Consolas;\">SRC = main.c<\/span><br \/><span style=\"font-family:Consolas;\">OUT = programa<\/span><br \/><span style=\"font-family:Consolas;\">all:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; $(CC) -o $(OUT) $(SRC)<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>En este ejemplo, si m\u00e1s adelante cambias el nombre del archivo fuente o el compilador, solo tendr\u00e1s que hacerlo en una l\u00ednea.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"anadir-comentarios-explicativos\"><span><strong>A\u00f1adir comentarios explicativos<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Puedes documentar tu Makefile utilizando el s\u00edmbolo&nbsp;<\/span><span style=\"font-family:Consolas;\">#<\/span><span>, igual que en muchos lenguajes de scripting. Esto resulta \u00fatil para mantener el c\u00f3digo claro y comprensible.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\"># Definimos las variables para simplificar cambios<\/span><br \/><span style=\"font-family:Consolas;\">CC = gcc<\/span><br \/><span style=\"font-family:Consolas;\">SRC = main.c<\/span><br \/><span style=\"font-family:Consolas;\">OUT = programa<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>La combinaci\u00f3n de variables y comentarios facilita la colaboraci\u00f3n y el mantenimiento del proyecto, especialmente en entornos de trabajo compartido.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"uso-de-condicionales-y-funciones-basicas\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Uso de condicionales y funciones b\u00e1sicas<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Makefile tambi\u00e9n permite utilizar condicionales y funciones que te ayudan a gestionar comportamientos diferentes seg\u00fan el entorno o las condiciones del proyecto. Esto hace que tu archivo sea m\u00e1s din\u00e1mico y flexible.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"condicionales-en-makefile\"><span><strong>Condicionales en Makefile<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Puedes definir condiciones utilizando directivas como&nbsp;<\/span><span style=\"font-family:Consolas;\">ifeq<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">ifneq<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">ifdef<\/span><span> o&nbsp;<\/span><span style=\"font-family:Consolas;\">ifndef<\/span><span>. Estas permiten ejecutar reglas o definir variables solo si se cumplen ciertas condiciones.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">ifeq ($(DEBUG),1)<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; CFLAGS = -g<\/span><br \/><span style=\"font-family:Consolas;\">else<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; CFLAGS = -O2<\/span><br \/><span style=\"font-family:Consolas;\">endif<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Esto es \u00fatil, por ejemplo, si quieres tener reglas distintas para entornos de desarrollo y producci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"funciones-para-operaciones-comunes\"><span><strong>Funciones para operaciones comunes<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Makefile incorpora funciones integradas que te permiten manipular cadenas, buscar archivos o recorrer listas. Algunas de las m\u00e1s comunes son&nbsp;<\/span><span style=\"font-family:Consolas;\">subst<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">wildcard<\/span><span> o&nbsp;<\/span><span style=\"font-family:Consolas;\">foreach<\/span><span>.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">SRC = $(wildcard *.c)<\/span><br \/><span style=\"font-family:Consolas;\">OBJ = $(subst .c,.o,$(SRC))<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Estas funciones ampl\u00edan el poder de los Makefiles para adaptarse a necesidades m\u00e1s complejas, sin salir del propio entorno de construcci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"integracion-de-makefile-en-entornos-multiplataforma\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Integraci\u00f3n de Makefile en entornos multiplataforma<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Una de las grandes ventajas de Makefile es su capacidad para ejecutarse en diferentes sistemas operativos con pocas modificaciones. Esto lo convierte en una herramienta ideal para proyectos colaborativos y entornos de trabajo heterog\u00e9neos.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"adaptar-makefile-a-windows-linux-y-macos\"><span><strong>Adaptar Makefile a Windows, Linux y macOS<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Aunque el n\u00facleo de los comandos Make es multiplataforma, algunas \u00f3rdenes espec\u00edficas pueden variar seg\u00fan el sistema operativo. Para solventar esto, puedes usar condicionales para ejecutar instrucciones distintas en cada entorno:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">ifeq ($(OS),Windows_NT)<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; RM = del<\/span><br \/><span style=\"font-family:Consolas;\">else<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; RM = rm -f<\/span><br \/><span style=\"font-family:Consolas;\">endif<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Tambi\u00e9n es buena pr\u00e1ctica evitar rutas absolutas o comandos que solo funcionen en un sistema (como&nbsp;<\/span><span style=\"font-family:Consolas;\">rm<\/span><span> en Unix y&nbsp;<\/span><span style=\"font-family:Consolas;\">del<\/span><span> en Windows), optando en su lugar por soluciones compatibles o condicionales adaptadas.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"buenas-practicas-para-entornos-compartidos\"><span><strong>Buenas pr\u00e1cticas para entornos compartidos<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Si tu proyecto se desarrolla en equipo, es importante escribir Makefiles que funcionen sin errores fuera de tu m\u00e1quina local. Aqu\u00ed algunas recomendaciones:<\/span><o_p><\/o_p><\/p>\n<ul style=\"list-style-type:disc;\">\n<li style=\"margin-bottom:0cm;\"><span>Usa variables para definir rutas y comandos, evitando valores codificados directamente.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>A\u00f1ade comentarios claros para que otros desarrolladores entiendan cada regla.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Verifica que las dependencias necesarias (como compiladores o scripts) est\u00e9n disponibles en los sistemas destino.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Prueba el Makefile en distintos entornos antes de integrarlo en un flujo de trabajo continuo.<o_p><\/o_p><\/span><\/li>\n<\/ul>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Con una estructura bien pensada, tu Makefile podr\u00e1 ejecutarse sin problemas en cualquier equipo del proyecto, mejorando la productividad y reduciendo errores.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"automatizacion-de-tareas-comunes-con-makefile\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Automatizaci\u00f3n de tareas comunes con Makefile<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Makefile no se limita a compilar c\u00f3digo: tambi\u00e9n permite automatizar tareas repetitivas del d\u00eda a d\u00eda en el desarrollo de software. Desde lanzar pruebas hasta limpiar archivos temporales, su versatilidad lo convierte en un aliado potente para desarrolladores y equipos t\u00e9cnicos.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"ejemplos-practicos-de-tareas-automatizadas\"><span><strong>Ejemplos pr\u00e1cticos de tareas automatizadas<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Estas son algunas tareas habituales que puedes automatizar f\u00e1cilmente con Makefile:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">test:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; pytest tests\/<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">clean:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; rm -rf *.pyc __pycache__\/<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">lint:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; flake8 src\/<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">build:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; python setup.py sdist bdist_wheel<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Cada una de estas reglas puede ejecutarse con&nbsp;<\/span><span style=\"font-family:Consolas;\">make tarea<\/span><span>, permitiendo a cualquier miembro del equipo lanzar procesos estandarizados sin recordar comandos complejos.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"personalizacion-y-reutilizacion\"><span><strong>Personalizaci\u00f3n y reutilizaci\u00f3n<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Una gran ventaja de usar Makefile es su flexibilidad. Puedes definir variables reutilizables para rutas, comandos o flags, y usar comodines (<\/span><span style=\"font-family:Consolas;\">%<\/span><span>) o patrones para reglas gen\u00e9ricas que se aplican a m\u00faltiples archivos. Adem\u00e1s, puedes dividir tus Makefiles en archivos separados e incluirlos mediante&nbsp;<\/span><span style=\"font-family:Consolas;\">include<\/span><span> para mantener la organizaci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Esta capacidad de adaptaci\u00f3n convierte a Make en una herramienta que escala bien desde peque\u00f1os scripts hasta procesos complejos de compilaci\u00f3n, pruebas y despliegue continuo.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"makefile-en-proyectos-multiplataforma\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Makefile en proyectos multiplataforma<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Uno de los puntos fuertes de Makefile es su compatibilidad con entornos diversos, lo que lo hace ideal para proyectos que deben ejecutarse en sistemas Linux, macOS y Windows. Aunque Make fue dise\u00f1ado inicialmente para sistemas Unix, hoy en d\u00eda existen formas fiables de utilizarlo en entornos multiplataforma.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"compatibilidad-y-adaptabilidad\"><span><strong>Compatibilidad y adaptabilidad<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>En sistemas macOS y Linux, Make suele estar preinstalado o se puede instalar f\u00e1cilmente desde los gestores de paquetes del sistema (<\/span><span style=\"font-family:Consolas;\">apt<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">brew<\/span><span>, etc.). En Windows, puedes utilizar herramientas como <strong>Make para Windows<\/strong>, <strong>MSYS2<\/strong>, <strong>Git Bash<\/strong> o <strong>WSL (Windows Subsystem for Linux)<\/strong> para trabajar con Makefiles de forma funcional y consistente.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Adem\u00e1s, los comandos definidos en un Makefile pueden adaptarse usando condicionales o variables espec\u00edficas para cada sistema operativo, evitando errores en entornos mixtos y facilitando la colaboraci\u00f3n entre desarrolladores.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"buenas-practicas-para-portabilidad\"><span><strong>Buenas pr\u00e1cticas para portabilidad<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Para asegurar que tu Makefile funcione sin problemas en cualquier plataforma, puedes seguir estas recomendaciones:<\/span><o_p><\/o_p><\/p>\n<ul style=\"list-style-type:disc;\">\n<li style=\"margin-bottom:0cm;\"><span>Usa comandos compatibles con POSIX siempre que sea posible.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Define variables como&nbsp;<\/span><span style=\"font-family:Consolas;\">SHELL<\/span><span> para usar Bash u otro int\u00e9rprete expl\u00edcito.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Evita rutas absolutas y opta por rutas relativas al proyecto.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>A\u00f1ade comentarios explicativos para aclarar dependencias espec\u00edficas del sistema.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span>Considera separar reglas cr\u00edticas por entorno y seleccionar las adecuadas con condicionales&nbsp;<\/span><span style=\"font-family:Consolas;\">ifeq<\/span><span>.<o_p><\/o_p><\/span><\/li>\n<\/ul>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Estas pr\u00e1cticas ayudan a mantener un entorno de desarrollo coherente y evitan conflictos entre sistemas operativos diferentes, algo clave en equipos distribuidos o proyectos open source.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"estructura-basica-de-un-makefile\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Estructura b\u00e1sica de un Makefile<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Un Makefile est\u00e1 compuesto por reglas que definen c\u00f3mo se deben ejecutar ciertas tareas. Cada regla suele incluir un objetivo, sus dependencias y una o m\u00e1s l\u00edneas de comandos que se ejecutan si las dependencias cambian o no existen.<\/span><o_p><\/o_p><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"elementos-principales-de-un-makefile\"><span><strong>Elementos principales de un Makefile<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Los componentes m\u00e1s comunes en un Makefile son:<\/span><o_p><\/o_p><\/p>\n<ul style=\"list-style-type:disc;\">\n<li style=\"margin-bottom:0cm;\"><span><strong>Objetivo (target):<\/strong> Es el nombre de la tarea o archivo a generar.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span><strong>Dependencias:<\/strong> Archivos o condiciones que deben cumplirse antes de ejecutar la regla.<o_p><\/o_p><\/span><\/li>\n<li style=\"margin-bottom:0cm;\"><span><strong>Recetas:<\/strong> Comandos que se ejecutan para cumplir el objetivo (deben comenzar con una tabulaci\u00f3n, no espacios).<o_p><\/o_p><\/span><\/li>\n<\/ul>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Una regla t\u00edpica tiene esta forma:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">objetivo: dependencias<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; &lt;comandos&gt;<\/span><\/p>\n<h3 style=\"margin-bottom:14.05pt;margin-left:0cm;margin-right:0cm;margin-top:14.05pt;\" id=\"ejemplo-simple-de-estructura\"><span><strong>Ejemplo simple de estructura<\/strong><\/span><o_p><\/o_p><\/h3>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Este Makefile compila un programa a partir de un archivo fuente:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">app: main.c<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; gcc main.c -o app<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Si&nbsp;<\/span><span style=\"font-family:Consolas;\">main.c<\/span><span> cambia o no existe&nbsp;<\/span><span style=\"font-family:Consolas;\">app<\/span><span>, Make ejecutar\u00e1 el comando para compilarlo. Si nada ha cambiado, Make no har\u00e1 nada, lo que lo convierte en una herramienta eficiente para automatizar solo cuando es necesario.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"uso-de-variables-y-reutilizacion-de-codigo\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Uso de variables y reutilizaci\u00f3n de c\u00f3digo<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Una de las grandes ventajas de Make es la posibilidad de definir variables para evitar repeticiones y facilitar la reutilizaci\u00f3n del c\u00f3digo. Esto no solo mejora la legibilidad de los Makefiles, sino que permite hacerlos m\u00e1s flexibles y adaptables a cambios futuros.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Puedes declarar variables con&nbsp;<\/span><span style=\"font-family:Consolas;\">=<\/span><span> y luego reutilizarlas en varias reglas. Es especialmente \u00fatil para definir compiladores, flags o rutas comunes en un proyecto.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">CC=gcc<\/span><br \/><span style=\"font-family:Consolas;\">CFLAGS=-Wall -g<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">main: main.o utils.o<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; $(CC) $(CFLAGS) -o main main.o utils.o<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>En este ejemplo,&nbsp;<\/span><span style=\"font-family:Consolas;\">CC<\/span><span> es la variable que representa el compilador (<\/span><span style=\"font-family:Consolas;\">gcc<\/span><span>), mientras que&nbsp;<\/span><span style=\"font-family:Consolas;\">CFLAGS<\/span><span> incluye las opciones comunes de compilaci\u00f3n. Luego, se reutilizan en la regla de construcci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Tambi\u00e9n puedes crear variables para nombres de archivos, directorios o comandos complejos, y modificar su valor seg\u00fan el entorno si es necesario.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">SOURCES=main.c utils.c<\/span><br \/><span style=\"font-family:Consolas;\">OBJECTS=$(SOURCES:.c=.o)<\/span><\/p>\n<p><span style=\"font-family:Consolas;\">all: $(OBJECTS)<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; $(CC) $(CFLAGS) -o main $(OBJECTS)<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Este enfoque facilita mantener tu Makefile limpio y f\u00e1cil de mantener incluso en proyectos grandes.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"crear-tareas-personalizadas-con-make\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Crear tareas personalizadas con Make<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Adem\u00e1s de compilar programas, Make permite definir tareas personalizadas que automatizan procesos comunes del proyecto, como limpiar archivos temporales, ejecutar tests o generar documentaci\u00f3n. Estas tareas son simplemente reglas sin dependencias ni comandos de compilaci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Por ejemplo, puedes crear una tarea&nbsp;<\/span><span style=\"font-family:Consolas;\">clean<\/span><span> para eliminar los archivos&nbsp;<\/span><span style=\"font-family:Consolas;\">.o<\/span><span> y binarios generados durante la compilaci\u00f3n, lo que mantiene el entorno limpio entre ejecuciones:<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">clean:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; rm -f *.o main<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Tambi\u00e9n puedes definir tareas como&nbsp;<\/span><span style=\"font-family:Consolas;\">test<\/span><span>,&nbsp;<\/span><span style=\"font-family:Consolas;\">install<\/span><span> o&nbsp;<\/span><span style=\"font-family:Consolas;\">deploy<\/span><span>, seg\u00fan las necesidades de tu proyecto. Basta con asignarles un nombre y los comandos que deseas ejecutar cuando invoques esa tarea con&nbsp;<\/span><span style=\"font-family:Consolas;\">make nombre_tarea<\/span><span>.<\/span><o_p><\/o_p><\/p>\n<p><span style=\"font-family:Consolas;\">test:<\/span><br \/><span style=\"font-family:Consolas;\">&nbsp; &nbsp; python3 -m unittest discover tests<\/span><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Estas tareas convierten el Makefile en una herramienta vers\u00e1til de automatizaci\u00f3n, m\u00e1s all\u00e1 del contexto de compilaci\u00f3n.<\/span><o_p><\/o_p><\/p>\n<h2 style=\"margin-bottom:14.95pt;margin-left:0cm;margin-right:0cm;margin-top:14.95pt;\" id=\"compatibilidad-multiplataforma-y-buenas-practicas\"><span style=\"font-family:&quot;Aptos&quot;,sans-serif;font-size:18.0pt;line-height:116%;\"><strong>Compatibilidad multiplataforma y buenas pr\u00e1cticas<\/strong><\/span><o_p><\/o_p><\/h2>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Cuando trabajas en equipos con sistemas operativos distintos (Linux, macOS, Windows con WSL), es importante tener en cuenta ciertas consideraciones para que el Makefile funcione correctamente en todos los entornos.<\/span><o_p><\/o_p><\/p>\n<p style=\"margin-bottom:12.0pt;margin-left:0cm;margin-right:0cm;margin-top:12.0pt;\"><span>Entre las pr\u00e1cticas recomendadas se incluyen:<\/span><o_p><\/o_p><\/p>\n<p><span\n<\/p>","protected":false},"excerpt":{"rendered":"<p>Makefile es una herramienta cl\u00e1sica y potente que permite automatizar tareas repetitivas dentro de proyectos de software. Aunque naci\u00f3 en [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1192,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar"],"acf":[],"_links":{"self":[{"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/posts\/3420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/comments?post=3420"}],"version-history":[{"count":0,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/posts\/3420\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/media\/1192"}],"wp:attachment":[{"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/media?parent=3420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/categories?post=3420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/fr\/wp-json\/wp\/v2\/tags?post=3420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}