<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dottoNetto &#187; Fuentes</title>
	<atom:link href="http://dottonetto.com/home/category/fuentes/feed/" rel="self" type="application/rss+xml" />
	<link>http://dottonetto.com/home</link>
	<description>Programación, tecnología y un poco de todo</description>
	<lastBuildDate>Thu, 07 Mar 2013 10:40:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Configurando Eclipse para programar en C++/GTK3 (Linux)</title>
		<link>http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/</link>
		<comments>http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 21:03:36 +0000</pubDate>
		<dc:creator>ajaest</dc:creator>
				<category><![CDATA[Fuentes]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[3]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[gtkmm]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pkg-config]]></category>

		<guid isPermaLink="false">http://dottonetto.com/home/?p=934</guid>
		<description><![CDATA[Tutorial explicativo sobre la configuración de Eclipse en Linux y el plugin CDT para compilar código C++ sobre GTK y la herramienta pkg-congig.]]></description>
			<content:encoded><![CDATA[<p>Cuando empecé a investigar sobre las herramientas de desarrollo para Gnome me topé con el nombre de <a href="http://www.anjuta.org/">Anjuta</a> varias veces. Anjuta es el IDE oficial del proyecto Gnome, ofrece un soporte sólido para el desarollo de programas GTK mediante los lenguajes de programación C y sus bindings para C++, Java, JavaScript y Vala.</p>
<p>La verdad es que el aspecto de la herramienta es bueno, incluye hasta un diseñador de interfaces WYSIWYG, pero receloso como soy de duplicar el conocimiento, me mostraba reticente a tener que aprender a usar una nuevo entorno de desarollo. Por ello y antes de ponerme manos a la obra, me propuse investigar si existía alguna forma de usar una herramienta que era por mí de sobra conocida: el IDE Eclipse.</p>
<p>Eclipse era originalmente un IDE destinado principalmente al desarrollo de aplicaciones Java, pero con el paso del tiempo fue ganando soporte para otros idiomas a través de plugins y builds específicos. Para C/C++ en particular, existe el plugin CDT, que añade soporte básico para compilación, enlazado, debugging, resaltado y autocompletado para este lenguaje. Configurar CDT y compilar usando la librería estándar de C/C++ es bastante fácil, sin embargo no se puede decir lo mismo del proceso para añadir soporte a librerías externas/no estándar como GTK, sobre todo para un novato como yo. La información que existe en internet sobre el tema es difusa y en muchos aspectos inexacta, y la interfaz de configuración de Eclipse no ayuda demasiado.</p>
<p>Es por ello que he decidido redactar este tutorial paso a paso sobre como configurar Eclipse para desarrollar en C++/GTK. No soy un experto, así que agradeceré cualquier corrección o experiencia que pueda añadir exactitud al proceso.</p>
<h2>El punto de partida</h2>
<p>Parto de una distribución Linux-Fedora 16 de 64 bits, con Eclipse para Java instalado. Las instrucciones para la instalación de paquetes serán las propias para este sistema operativo, así que tendrás que buscar el nombre del paquete correspondiente si usas otro. Si añades los comandos de tu distribución en los comentarios para instalar cada uno de los paquetes que aparecen en este tutorial gustoso los añadiré junto a los de Fedora.</p>
<h2>Instalando soporte para C++/GTK</h2>
<p>Primero, tenemos que instalar el compilador de C++. Para Fedora, podemos usar el comando de consola:</p>
<p style="padding-left: 30px;"><code>yum instal gcc-c++</code></p>
<p>Las librería GTK, así como las librerías de Gnome fueron diseñadas para C99, lo que significa el soporte para otros lenguajes se hace mediante bindings. En particular, el binding de GTK para C++ se llama gtkmm. En principio, instalar gtkmm debería ser suficiente para instalar como dependencia las librerías necesarias para desarrollar en GTK. El comando para Fedora sería:</p>
<p style="padding-left: 30px;"><code>yum install gtkmm30</code></p>
<p>Instalamos también las librerías de desarollo de gtkmm. Técnicamente, instalar las librerías de desarrollo debería resolver las dependencias necesarias para instalar gtkmm.</p>
<p style="padding-left: 30px;"><code>yum install gtkmm30-devel</code></p>
<p>Técnicamente, el sistema está listo para compilar.</p>
<h2>Instalando Eclipse y el plugin CDT</h2>
<p>Hay que instalar el plugin CDT para añadir soporte para C/C++ a eclipse. El comando en Fedora sería</p>
<p style="padding-left: 30px;"><code>yum install eclipse-cdt</code></p>
<p>Si no tienes instalado Eclipse, la resolución de dependencias de esta del paquete lo instalará también.</p>
<h2>Creando un proyecto y activando el entorno de desarollo para C++/GTK</h2>
<p>Arrancamos Eclipse, abrimos el menú contextual desde el explorador de proyectos, seleccionamos &#8220;New Project&#8221; &gt; &#8220;C++ Project&#8221;.</p>
<div id="attachment_976" class="wp-caption aligncenter" style="width: 600px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/1/" rel="attachment wp-att-976"><img class="size-large wp-image-976" title="Nuevo Proyecto C++" src="http://dottonetto.com/home/wp-content/uploads/2012/01/1-1024x575.png" alt="Creando un nuevo proyecto en C++" width="590" height="331" /></a><p class="wp-caption-text">Creando un nuevo proyecto en C++</p></div>
<p>Vamos a crear una carpeta de código fuente y a incluir un fichero de C++ con un ejemplo muy simple de ventana en GTK para Gnome 3. Al final usaremos este código, en las primeras imágenes hemos usado una versión más corta para probar el autocompletado más tarde:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;gtkmm.h&gt;</span>
<span style="color: #339900;">#include &lt;gtkmm/button.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  Gtk<span style="color: #008080;">::</span><span style="color: #007788;">Main</span> kit<span style="color: #008000;">&#40;</span>argc, argv<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  Gtk<span style="color: #008080;">::</span><span style="color: #007788;">Window</span> window<span style="color: #008080;">;</span>
  Gtk<span style="color: #008080;">::</span><span style="color: #007788;">Button</span> button<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Hello World&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  window.<span style="color: #007788;">add</span><span style="color: #008000;">&#40;</span>button<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  button.<span style="color: #007788;">show</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  Gtk<span style="color: #008080;">::</span><span style="color: #007788;">Main</span><span style="color: #008080;">::</span><span style="color: #007788;">run</span><span style="color: #008000;">&#40;</span>window<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">EXIT_SUCCESS</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Como se puede ver en la imagen, Eclipse no reconoce ni las cabeceras ni las instrucciones de gtkmm.</p>
<div id="attachment_991" class="wp-caption aligncenter" style="width: 600px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/2/" rel="attachment wp-att-991"><img class="size-large wp-image-991" title="Compilar Gnome 3 en eclipse y C++ 2" src="http://dottonetto.com/home/wp-content/uploads/2012/02/2-1024x575.png" alt="Eclipse marca la semántica de gtkmm no reconocida" width="590" height="331" /></a><p class="wp-caption-text">Eclipse marca la semántica de gtkmm no reconocida</p></div>
<p>El primer paso será hacer que Eclipse reconozca la semántica y el autocompletado de código para gtkmm. Para ello, tenemos que indicarle a Eclipse en qué directorio puede encontrar los archivos de cabecera y las definiciones de funciones y símbolos necesarios. En el explorador de proyectos de Eclipse, pulsamos el botón derecho sobre el nombre del proyecto y elegimos la opción &#8220;Properties&#8221; del menú contextual.</p>
<p>A continuación navegamos a través de las opciones de la barra lateral hasta alcanzar las opciones de construcción del proyecto(C/C++ Build -&gt;Settings-&gt;GCC C++ Compiler-&gt;Includes). Usando el botón de añadir, añadimos el directorio donde se encuentran las cabeceras de gtkmm en nuestro sistema operativo. En Fedora 16, ese directorio se encuentra en la ruta <tt>/usr/include/gtkmm</tt>.</p>
<div id="attachment_992" class="wp-caption aligncenter" style="width: 600px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/3/" rel="attachment wp-att-992"><img class="size-large wp-image-992" title="Incluyendo archivos de cabecera" src="http://dottonetto.com/home/wp-content/uploads/2012/02/3-1024x575.png" alt="Incluyendo los archivos de cabecera de gtkmm" width="590" height="331" /></a><p class="wp-caption-text">Incluyendo los archivos de cabecera de gtkmm para habilitar el autocompletado y el reconocimiento de sintaxis</p></div>
<p><strong><br />
</strong></p>
<h2>Configurando el compilador</h2>
<p>Mediante la combinación de teclas CTRL+B le indicaremos a Eclipse que compile y enlace los archivos binarios a partir del código fuente. En el estado actual, Eclipse no será capaz de compilar porque pese a poder resolver los símbolos específicos de gtkmm, no será capaz de resolver las referencias a otros símbolos dentro de <tt>gtkmm.h</tt>, así como enlazar los archivos binarios de objetos donde se implementa la funcionalidad de GTK. Para ayudarnos a configurar de manera rápida el compilador y la localización en el sistema de archivos de las dependencias viene en nuestra la herramienta <tt>pkg-config</tt>.<br />
<a name="pkg_config"></a></p>
<h3>Resolviendo dependencias de una manera rápida y sencilla con pkg-config</h3>
<div class="important_block">Lo que viene a continuación es una pequeña explicación de como funciona pkg-config. Si ya sabes como funciona, o te da igual mientras funcione, pasa al <a href="#solving_dependencies">siguiente apartado</a></div>
<p><tt><a title="pkg-config" href="http://es.wikipedia.org/wiki/Pkg-config">pkg-config</a></tt> es, a grosso modo y entre otras cosas, una herramienta de configuración y resolución de dependencias. Permite a través de una cadena que representa una librería o recurso obtener una cadena de texto preformateada según el estandar de argumentos de entrada de gcc que contiene las definiciones necesarias para poder compilar el recurso especificado.</p>
<p>Un ejemplo es la mejor manera entender como funciona. Si ejecutamos el siguiente comando desde la consola:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ pkg-config <span style="color: #660033;">--libs</span> <span style="color: #660033;">--cflags</span> gtkmm-<span style="color: #000000;">3.0</span>
-DGSEAL_ENABLE <span style="color: #660033;">-pthread</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>gtkmm-<span style="color: #000000;">3.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>gtkmm-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>atkmm-<span style="color: #000000;">1.6</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>giomm-<span style="color: #000000;">2.4</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>giomm-<span style="color: #000000;">2.4</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>pangomm-<span style="color: #000000;">1.4</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>pangomm-<span style="color: #000000;">1.4</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>gtk-<span style="color: #000000;">3.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>cairomm-<span style="color: #000000;">1.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>cairomm-<span style="color: #000000;">1.0</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>gdk-pixbuf-<span style="color: #000000;">2.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>gtk-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">/</span>unix-print -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>gdkmm-<span style="color: #000000;">3.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>gdkmm-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>atk-<span style="color: #000000;">1.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>glibmm-<span style="color: #000000;">2.4</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>glibmm-<span style="color: #000000;">2.4</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>glib-<span style="color: #000000;">2.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>glib-<span style="color: #000000;">2.0</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>sigc++-<span style="color: #000000;">2.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib64<span style="color: #000000; font-weight: bold;">/</span>sigc++-<span style="color: #000000;">2.0</span><span style="color: #000000; font-weight: bold;">/</span>include -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>pango-<span style="color: #000000;">1.0</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>cairo -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>pixman-<span style="color: #000000;">1</span> -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>freetype2 -I<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>include<span style="color: #000000; font-weight: bold;">/</span>libpng12  <span style="color: #660033;">-pthread</span> -lgtkmm-<span style="color: #000000;">3.0</span> -latkmm-<span style="color: #000000;">1.6</span> -lgdkmm-<span style="color: #000000;">3.0</span> -lgiomm-<span style="color: #000000;">2.4</span> -lpangomm-<span style="color: #000000;">1.4</span> <span style="color: #660033;">-lgtk-3</span> -lglibmm-<span style="color: #000000;">2.4</span> -lcairomm-<span style="color: #000000;">1.0</span> <span style="color: #660033;">-lgdk-3</span> -latk-<span style="color: #000000;">1.0</span> -lgio-<span style="color: #000000;">2.0</span> -lpangoft2-<span style="color: #000000;">1.0</span> -lpangocairo-<span style="color: #000000;">1.0</span> -lgdk_pixbuf-<span style="color: #000000;">2.0</span> <span style="color: #660033;">-lcairo-gobject</span> -lpango-<span style="color: #000000;">1.0</span> <span style="color: #660033;">-lfreetype</span> <span style="color: #660033;">-lfontconfig</span> -lgmodule-<span style="color: #000000;">2.0</span> <span style="color: #660033;">-lcairo</span> -lsigc-<span style="color: #000000;">2.0</span> -lgobject-<span style="color: #000000;">2.0</span> -lgthread-<span style="color: #000000;">2.0</span> <span style="color: #660033;">-lrt</span> -lglib-<span style="color: #000000;">2.0</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>La linea de retorno de la instrucción(la segunda), sería la lista de argumentos que habría que pasarle al compilador para que pueda resolver las dependencias de un archivo de código fuente que use cualquier recurso de gtkmm versión 3.0.</p>
<p>Como puede verse, mediante el argumento de compilador <tt>-I</tt> se incluyen los directorios donde se encuentran las cabeceras y archivos de objetos, dependientes del sistema operativo y la configuración local del usuario. Quizás os suene la importación <tt>-I/usr/include/gtkmm-3.0</tt>, que especifica el directorio que hemos usado antes para activar el autocompletado en Eclipse. También es interesante ver que especifica las opciones -lgkt-3 <tt>-lgtkmm-3.0</tt>, que mediante la opción <tt>-l</tt> de gcc especifica que se va a usar la librería gtkmmm para el enlazado.</p>
<p>En esta llamada a pkg-config hemos usado tres argumentos:</p>
<ul>
<li><tt>--cflags</tt>: ordena a pkg-config que devuelva en la cadena todos los argumentos que el <strong>compilador</strong> necesitaría para poder compilar(ojo, no enlazar) un código fuente que contenga referencia a recursos y símbolos agrupados en el paquete de nombre especificado.</li>
<li><tt>--libs</tt>: ordena a pkg-config que devuelva en la cadena todos los argumentos que el <strong>enlazador</strong> necesitaría para poder enlazar código fuente y objetos que contengan referencias a recursos y símbolos agrupados en el paquete de nombre especificado.</li>
<li><tt>gtkmm-3.0</tt>: es el nombre del recurso, también llamado <strong>paquete</strong>, para el cual se quieren obtener las dependencias. Los paquetes con las definiciones de dependencias normalmente se instalan automáticamente cuando instalamos el paquete de desarrollo concreto mediante el gestor de paquetes de nuestro sistema operativo. Por ejemplo, cuando antes hicimos:
<p><code>yum install gtkmm30-devel</code></p>
<p>en alguna parte del sistema de archivos se instaló un archivo llamado &#8220;<tt>gtkmm-3.0.pc</tt>&#8221; que contenía las definiciones de dependencias para gtkmm.</p>
<p> Aparte del paquete que hemos usado para gtkmm versión 3, existen otros paquetes como gtk+3.0 o zlib. Por poner un ejemplo, considerando la instalación de mi sistema operativo similar a la de cualquier programador, más de 120 paquetes de resolución de dependencias están instalados. Las definiciones de paquetes instaladas en el sistema operativo pueden mostrarse ejecutando el siguiente comando:</p>
<p><code>pkg-config  --list-all</code></p>
<p>También existen paquetes de dependencias para versiones antiguas y para compilado multiplataforma. Si hubiésemos querido obtener las dependecias para gtkmm 2.4 en vez de la 3.0, nos hubiera bastado con cambiar el nombre del paquete a gtkmm+2.4.</p>
</li>
</ul>
<p>Llegados a este punto, la potencia de pkg-config viene de la combinación de esta orden con la sintaxis específica de bash. Una sentencia que contenga otra sentencia en la misma línea encerrada entre comas francesas 「`」 se ejecutará sustituyendo el contenido de las comas por la cadena de salida de la sentencia entre comas. Un ejemplo:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Esto está fuera de las comas francesas<span style="color: #780078;">`echo &quot;'Y esto está dentro de las comas'&quot;`</span>&quot;</span>
<span style="color: #ff0000;">&quot;Esto está fuera de las comas francesas 'Y esto está dentro de las comas'&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>La utilidad de esta funcionalidad se demuestra al permitirnos combinar gcc y pkg-config de la siguiente manera:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">g++</span> main.cpp <span style="color: #660033;">-o</span> main.bin <span style="color: #000000; font-weight: bold;">`</span>pkg-config <span style="color: #660033;">--libs</span> <span style="color: #660033;">--cflags</span> gtkmm-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>Podemos saber cuál es realmente el comando ejecutado usando <tt>echo</tt> de la siguiente manera:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;g++ main.cpp -o main.bin <span style="color: #780078;">`pkg-config --libs --cflags gtkmm-3.0`</span>&quot;</span>
<span style="color: #ff0000;">&quot;g++ main.cpp -o main.bin -DGSEAL_ENABLE -pthread -I/usr/include/gtkmm-3.0 -I/usr/lib64/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/include/giomm-2.4 -I/usr/lib64/giomm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/lib64/pangomm-1.4/include -I/usr/include/gtk-3.0 -I/usr/include/cairomm-1.0 -I/usr/lib64/cairomm-1.0/include -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib64/gdkmm-3.0/include -I/usr/include/atk-1.0 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12  -pthread -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lgtk-3 -lglibmm-2.4 -lcairomm-1.0 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lfreetype -lfontconfig -lgmodule-2.0 -lcairo -lsigc-2.0 -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>user<span style="color: #000000; font-weight: bold;">@</span>laptop<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>Se ve el resultado, ¿No? La sentencia anterior compila el archivo <tt>main.cpp</tt> y expande la orden pkg-config de tal forma que añade al final de la sentencia todas los argumentos necesarios para resolver cualquier dependencia necesaria para <tt>gtkmm</tt>. Esta instrucción con esta sintaxis tan elegante soluciona de una tacada la mayoría de los problemas de compilación dependiente del entorno y nos va a servir ahora para finiquitar la configuración de compilación de Eclipse de una manera rápida y sencilla.<br />
<a name="solving_dependencies"></a></p>
<h3>Resolviendo dependencias en Eclipse usando pkg-config</h3>
<p>Finalmente, vamos a lograr compilar el programa anterior añadiendo la sentencia pkg-config a la configuración de montaje de Eclipse. Abrimos el menú de configuración del proyecto pulsando el botón derecho sobre el nombre del proyecto y seleccionamos &#8220;Properties/Propiedades&#8221;.</p>
<p>Primero configuramos el compilador para añadirle dependencias. Seleccionamos &#8220;C/C++ Build -&gt;Settings-&gt;GCC C++ Compiler-&gt;Miscellaneous&#8221; y en el campo de texto &#8220;Other flags&#8221; añadimos el siguiente token:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">`</span>pkg-config <span style="color: #660033;">--cflags</span> gtkmm-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

</p>
<div class="notice_block">Atención con las comas francesas 「`」, son importantes. Consulta el apartado &#8220;Resolviendo dependencias de una manera rápida y sencilla con pkg-config&#8221; para más información.</div>
<div id="attachment_1329" class="wp-caption aligncenter" style="width: 600px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/7a/" rel="attachment wp-att-1329"><img class="size-large wp-image-1329" title="Configurando la resolución de dependencias en eclipse con pkg-config" src="http://dottonetto.com/home/wp-content/uploads/2012/02/7a-1024x575.png" alt="Configurando la resolución de dependencias en eclipse con pkg-config" width="590" height="331" /></a><p class="wp-caption-text">Configurando la resolución de dependencias en el compilador de eclipse con pkg-config</p></div>
<p>A continuación vamos a configurar el enlazador. Seleccionamos también desde el menú propiedades del proyecto  &#8221;C/C++ Build -&gt;Settings-&gt;GCC C++ Linker-&gt;Miscellaneous&#8221; y en el campo de texto &#8220;Linker flags&#8221; añadimos el siguiente token:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">`</span>pkg-config <span style="color: #660033;">--libs</span> gtkmm-<span style="color: #000000;">3.0</span><span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

</p>
<div class="notice_block">Atención con las comas francesas 「`」, son importantes. Consulta el apartado &#8220;Resolviendo dependencias de una manera rápida y sencilla con pkg-config&#8221; para más información.</div>
<div id="attachment_1336" class="wp-caption aligncenter" style="width: 600px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/8/" rel="attachment wp-att-1336"><img class="size-large wp-image-1336" title="Configurando la resolución de dependencias en el enlazador de Eclipse con pkg-config " src="http://dottonetto.com/home/wp-content/uploads/2012/02/8-1024x575.png" alt="Configurando la resolución de dependencias en el enlazador de Eclipse con pkg-config " width="590" height="331" /></a><p class="wp-caption-text">Configurando la resolución de dependencias en el enlazador de Eclipse con pkg-config</p></div>
<p>Técnicamente está listo para construir el proyecto. Lo que hemos hecho es indicar a Eclipse que añada las sentencias de resolución de dependencias al final de la instrucción que usa para llamar al gcc.</p>
<h2>Compilando&#8230;¡Hola Mundo!</h2>
<p>En Eclipse-CDT podemos configurar varias configuraciones de compilación personalizadas. Por defecto, Eclipse añade a todos los proyectos nuevos las configuraciones &#8220;Debug&#8221; y &#8220;Release&#8221;, aplica la primera por defecto. Toda la configuración que hemos hecho hasta ahora se ha aplicado a la configuración de &#8220;Debug&#8221;, así que si en este momento compilar mediante &#8220;Release&#8221; obtendremos el mismo resultado que al principio. Habría que reconfigurar de nuevo &#8220;Release&#8221; o cualquier nueva configuración de manera análoga a lo hecho anteriormente para hacerlo funcionar.</p>
<p>Si pulsamos CTRL+B construiremos el proyecto usando la configuración por defecto &#8220;Debug&#8221;. La salida por consola debería ser algo parecido a los siguiente:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">**** Build of configuration Debug for project Hola_Mundo ****
&nbsp;
make all
Building file: ../src/main.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/include/gtkmm-3.0 -O0 -g3 -Wall -c -fmessage-length=0 `pkg-config --cflags gtkmm-3.0` -MMD -MP -MF&quot;src/main.d&quot; -MT&quot;src/main.d&quot; -o &quot;src/main.o&quot; &quot;../src/main.cpp&quot;
Finished building: ../src/main.cpp
&nbsp;
Building target: Hola_Mundo
Invoking: GCC C++ Linker
g++ `pkg-config --libs gtkmm-3.0` -o &quot;Hola_Mundo&quot;  ./src/main.o
Finished building target: Hola_Mundo
&nbsp;
**** Build Finished ****</pre></div></div>

</p>
<p>Eclipse genera una carpeta con el nombre de la configuración en la cual crea todos los archivos necesarios para construir el proyecto basándose en la configuración de construcción de éste. Por ejemplo, para la configuración &#8220;Debug&#8221; creará una carpeta de mismo nombre en la raíz del proyecto conteniendo el código objeto, una estructura de makefile, el binario,etc..</p>
<div id="attachment_1385" class="wp-caption aligncenter" style="width: 322px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/9/" rel="attachment wp-att-1385"><img class="size-full wp-image-1385" title="Archivos autogenerados después de construir el proyecto" src="http://dottonetto.com/home/wp-content/uploads/2012/02/9.png" alt="Archivos autogenerados después de construir el proyecto" width="312" height="369" /></a><p class="wp-caption-text">La carpeta &quot;Debug&quot; y todo su contenido fueron autogenerados después de construir el proyecto</p></div>
<div class="notice_block">Ninguno de los archivos autogenerados al construir el proyecto debe ser modificado manualmente. Eclipse reescribe todos los archivos cada vez que se le ordena construir el proyecto, así que todos los cambios se perderán. Si quieres editar alguna de las configuraciones, por ejemplo la del makefile, tendrás que hacerlo cambiando el campo correspondiente en las opciones del proyecto.</div>
<p>Si pulsamos CTRL+F11 ordenaremos a Eclipse arrancar la última versión construida del proyecto. ¡Hola Mundo!</p>
<div id="attachment_1390" class="wp-caption aligncenter" style="width: 740px"><a href="http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/attachment/10/" rel="attachment wp-att-1390"><img class="size-full wp-image-1390" title="¡Hola Mundo!" src="http://dottonetto.com/home/wp-content/uploads/2012/02/10.png" alt="¡Hola Mundo!" width="730" height="486" /></a><p class="wp-caption-text">¡Hola Mundo!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://dottonetto.com/home/2012/02/configurando-eclipse-para-programar-en-cgtk3-linux/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Publicada la fuente TrueType de Javadikt</title>
		<link>http://dottonetto.com/home/2011/05/publicada-la-fuente-truetype-de-javadikt/</link>
		<comments>http://dottonetto.com/home/2011/05/publicada-la-fuente-truetype-de-javadikt/#comments</comments>
		<pubDate>Wed, 04 May 2011 20:53:50 +0000</pubDate>
		<dc:creator>ajaest</dc:creator>
				<category><![CDATA[Fuentes]]></category>
		<category><![CDATA[JavaDiKt]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[fuente]]></category>
		<category><![CDATA[Hanazono]]></category>
		<category><![CDATA[inglés]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Manual]]></category>
		<category><![CDATA[on]]></category>
		<category><![CDATA[página]]></category>
		<category><![CDATA[Sazanami]]></category>
		<category><![CDATA[TrueType]]></category>
		<category><![CDATA[V concurso universitario de software libre]]></category>
		<category><![CDATA[Versión]]></category>

		<guid isPermaLink="false">http://ajaest.net/home/?p=852</guid>
		<description><![CDATA[Tal y como prometí y como aperitivo para la próxima versión de JavaDiKt, he publicado hoy la fuente TrueType que usa éste programa. Se llama Sazanami-Hanazono Mincho, su originalísimo nombre viene de que esta fuente es fruto de la fusión de las fuentes libres Sazanami Mincho y Hanazono. Me he permitido hacer un cutre-logo de &#8230; </p><p><a class="more-link block-button" href="http://dottonetto.com/home/2011/05/publicada-la-fuente-truetype-de-javadikt/">Continuar leyendo &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://project.javadikt.net/sazanamihanazono/"><img class="aligncenter" style="border: 0px initial initial;" title="Sazanami-Hanazono Mincho" src="http://project.javadikt.net/sazanamihanazono/icon_256.png" alt="" width="256" height="256" /></a>Tal y como prometí y como aperitivo para la próxima versión de JavaDiKt, he publicado hoy la fuente TrueType que usa éste programa. Se llama <strong>Sazanami-Hanazono Mincho</strong>, su originalísimo nombre viene de que esta fuente es fruto de la fusión de las fuentes libres<a title="Sazanami" href="http://sourceforge.jp/projects/efont/" target="_blank"> Sazanami Mincho</a> y <a href="http://fonts.jp/hanazono/" target="_blank">Hanazono</a>.</p>
<p style="text-align: left;">Me he permitido hacer un cutre-logo de 5 minutos que sigue más o menos la estética del <a href="http://javadikt.net/manual/1.1.3/ES_es/3.0-128.png" target="_blank">logo de JavaDiKt</a>, recalcando de esta forma que esta fuente es un subproyecto del proyecto JavaDiKt.</p>
<p style="text-align: left;">Tal y como escribí en la <a title="Sazanami-Hanazono project" href="http://project.javadikt.net/sazanamihanazono/" target="_blank">página oficial</a>(en inglés), la fuente fue hecha de manera &#8220;ad-hoc&#8221; para JavaDiKt usando <a href="http://fontforge.sourceforge.net/" target="_blank">FontForge</a>, y dado que apenas tengo conocimiento sobre programación de fuentes, no puedo asegurar 100% que la fuente funcione correctamente y que esté correctamente optimizada. Por eso animo a cualquiera que sepa un poco del tema a que la revise y colabore para mejorarla.</p>
]]></content:encoded>
			<wfw:commentRss>http://dottonetto.com/home/2011/05/publicada-la-fuente-truetype-de-javadikt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
