<?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>Desert Zarzamora &#187; kdevelop</title>
	<atom:link href="http://zarzamora.com.mx/tags/kdevelop/feed" rel="self" type="application/rss+xml" />
	<link>http://zarzamora.com.mx</link>
	<description>However, there is no real definition of a desert.</description>
	<lastBuildDate>Mon, 06 Sep 2010 19:34:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CMake para tus projectos II: Kdevelop</title>
		<link>http://zarzamora.com.mx/archivo-historico/527</link>
		<comments>http://zarzamora.com.mx/archivo-historico/527#comments</comments>
		<pubDate>Mon, 08 Sep 2008 18:54:27 +0000</pubDate>
		<dc:creator>Desert Zarzamora</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cmake]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[kdevelop]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://zarzamora.com.mx/?p=527</guid>
		<description><![CDATA[En el post anterior expliqué como hacer un par de CMakeLists.txt para generación automática de Makefiles. Pero CMake es mucho mas potente, tanto que puede generar proyectos de KDevelop, Visual Studio (C++), Code::Blocks, Dev C++, X-code, etc, etc&#8230; Creación automática de un proyecto de KDevelop con CMake Usaré exactamente lo que se describe en el [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://zarzamora.com.mx/archivo-historico/501">post anterior</a> expliqué como hacer un par de CMakeLists.txt para generación automática de Makefiles. Pero <a href="http://www.cmake.org/HTML/Documentation.html">CMake</a> es mucho mas potente, tanto que puede <a href="http://www.cmake.org/HTML/cmake-2.6.html#section_Generators">generar proyectos</a> de KDevelop, Visual Studio (C++), Code::Blocks, Dev C++, X-code, etc, etc&#8230;</p>
<h3>Creación automática de un proyecto de KDevelop con CMake</h3>
<p>Usaré exactamente lo que se describe en el <a href="http://zarzamora.com.mx/archivo-historico/501">post anterior</a>. Lo único que debe tenerse precaución es en eliminar todo lo que pudiera quedar dentro del directorio <strong>build/</strong> de generaciones pasadas. El directorio <strong>build/</strong> debe estar vacío.</p>
<pre>$ <strong>cd build/</strong>
$ <strong>cmake -G KDevelop3 ../</strong>
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ariel/Documentos/holaMundoCMake/build</pre>
<p>Y listo. Nota la opcion &#8220;<strong>-G KDevelop3</strong>&#8220;. En el directorio <strong>build/</strong> se auto genera un proyecto de KDevelop llamado <strong>HELLO.kdevelop</strong> pues HELLO es el nombre del proyecto que definimos en CMakeLists.txt. Ahora se puede abrir con KDevelop (C/C++). <strong>Project-&gt;Open Project</strong> y elegimos <strong>HELLO.kdevelop</strong>.</p>
<p><a rel="lightbox" href="http://zarzamora.com.mx/wp-content/uploads/2008/09/kdevelop-cmake.jpg"><img title="kdevelop-cmake" src="http://zarzamora.com.mx/wp-content/uploads/2008/09/kdevelop-cmake-300x236.jpg" alt="Abrir un projecto KDevelop generado por CMake" width="180" height="142" /></a><a rel="lightbox" href="http://zarzamora.com.mx/wp-content/uploads/2008/09/kdevelop-cmake-ejecuta.jpg"><img class="alignnone size-medium wp-image-534" title="kdevelop-cmake-ejecuta" src="http://zarzamora.com.mx/wp-content/uploads/2008/09/kdevelop-cmake-ejecuta-300x179.jpg" alt="" width="237" height="141" /></a></p>
<p>El proyecto compila, ejecuta y tenemos el arbol de inclusiones. Tambien podemos usar el debugger y el completador de código. Todo lo de KDevelop funciona porque es un proyecto nativo.</p>
<p>Ah, para que el completador de código funcione, debes tener KDevelop 3.5.2 al menos.</p>
]]></content:encoded>
			<wfw:commentRss>http://zarzamora.com.mx/archivo-historico/527/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMake para tus proyectos</title>
		<link>http://zarzamora.com.mx/archivo-historico/501</link>
		<comments>http://zarzamora.com.mx/archivo-historico/501#comments</comments>
		<pubDate>Sun, 07 Sep 2008 18:25:08 +0000</pubDate>
		<dc:creator>Desert Zarzamora</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cmake]]></category>
		<category><![CDATA[codeblocks]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[kdevelop]]></category>
		<category><![CDATA[makefile]]></category>
		<category><![CDATA[multiplataforma]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://zarzamora.com.mx/?p=501</guid>
		<description><![CDATA[Yo era de los que en algun día de la newbie-esca vida me atemorizaban los Makefiles. Temía que en la oscuridad de la noche saliera un Makefile del ropero, o que por debajo de la cama un Makefile me jalara los pies. Pues no mas. CMake es una excelente herramienta para generar Makefiles, y no [...]]]></description>
			<content:encoded><![CDATA[<p>Yo era de los que en algun día de la <em>newbie-esca</em> vida me atemorizaban los Makefiles. Temía que en la oscuridad de la noche saliera un Makefile del ropero, o que por debajo de la cama un Makefile me jalara los pies. Pues no mas.</p>
<p>CMake es una excelente herramienta para generar Makefiles, y no solo eso tambien genera soluciones de Visual Studio, Code::Blocks, Kdevelop entre muchas otras. Así que me puse a investigar y resulta que CMake es trivial de usar, hasta un newbie como yo lo puede usar (por lo tanto <a href="http://ubaldolnx.blogspot.com/">otros newbies</a> también podrían usarlo).</p>
<h3>1. Hello World: El código fuente</h3>
<p>Usaremos este código que muestra CMake para compilar y enlazar un programa principal con una librería extra generada por nosotros mismos. La siguiente estructura de directorios es la que hay que crear:</p>
<pre><span style="color: #0000ff;">holaMundoCMake</span>
|-- CMakeLists.txt
|-- <span style="color: #0000ff;">build</span>
`-- <span style="color: #0000ff;">src</span>
    |-- hola.cpp
    `-- <span style="color: #0000ff;">milib</span>
        |-- CMakeLists.txt
        |-- milib.cpp
        `-- milib.h</pre>
<p>La idea aqui es que vamos a generar un pequeño programita a partir del codigo en <strong>hola.cpp</strong> y de la libreria <strong>milib.cpp</strong>, el código de hola.cpp es muy sencillo:</p>
<p><strong>hola.cpp:</strong></p>
<pre>#include "milib.h"
int main(int argc, char* argv){
printf("\n Hola mundo desde main");
hola(2);
printf("\n");
}</pre>
<p>Y lo que hace es cargar el header milib.h que es donde está definida la función hola().</p>
<p><strong>milib.h</strong>:</p>
<pre>#include &lt;stdio.h&gt;
//Prototipo de funcion
void hola(int);</pre>
<p><strong>milib.c:</strong></p>
<pre>#include "milib.h"
// Implementacion de la funcion
void hola(int veces){
  int i=0;
  while (i&lt;veces){
    printf("\n [%u] Hola Mundo, desde 'milib'" , i);
    i++;
  }
}</pre>
<p>El código es realmente trivial (si no lo comprendes mejor ni sigas leyendo). Hasta este punto no hemos usado nada de CMake ni hemos creado Makefiles ni nada. El código bien podríamos compilarlo a mano.</p>
<h3>2. Hello World: Las CMakeLists.txt para CMake</h3>
<p>Hay un archivo de CMake en <strong>holaMundoCMake/CMakeLists.txt</strong> y hay otro en <strong>holaMundoCMake/src/milib</strong><strong>/CMakeLists.txt</strong>, éstos son los archivos clave para CMake. Con los comentarios se explican solos.</p>
<p><strong>holaMundoCMake/CMakeLists.txt:</strong></p>
<pre># El nombre del proyecto "HELLO".
# CMake genera automaticamente una variable llamada
# HELLO_SOURCE_DIR que puede llamarse usando
# ${HELLO_SOURCE_DIR} con la ruta del codigo
# lo mismo con ${HELLO_BINARY_DIR} para binarios

project (HELLO)

# Le decimos donde poner los binarios de librerias y ejecutables
# CMake admite instrucciones partidas en varias lineas
SET (LIBRARY_OUTPUT_PATH    ${HELLO_BINARY_DIR}/bin
	CACHE PATH "Directory for Libraries")
SET (EXECUTABLE_OUTPUT_PATH ${HELLO_BINARY_DIR}/bin
	CACHE PATH "Directory for Executables")

# Decimos a CMake que haga recursion a los siguientes directorios
# en orden de aparicion
add_subdirectory (src/milib)

# Directorios que debe incluir, ademas de los estandar.
include_directories (${HELLO_SOURCE_DIR}/src/milib/)

# Directorios para el enlazador, ademas de los estandar
# Para este ejemplo no los necesitamos ya que la unica libreria
# adicional es 'milib' y ya sabe donde encontrarla pues el mismo
# la genera
#link_directories (aqui pones mas rutas separadas por espacios)

# Decirle que queremos un ejecutable llamado holaMundo
# y le decimos el source para que lo compile
add_executable (holaMundo src/hola.cpp)

# Tenemos una libreria adicional llamada milib, enlazarla
target_link_libraries (holaMundo milib)</pre>
<p>El segundo CMakeLists sirve para compilar la libreria &#8220;milib&#8221; y es mucho mas corto:</p>
<p><strong>holaMundoCMake/src/milib</strong><strong>/CMakeLists.txt</strong></p>
<pre># Agregar una libreria llamada milib generada poru un cpp
# se pueden agregar muchas librerias con varios add_library
# Se deben listar todos los archivos fuente
add_library (milib milib.cpp milib.h)</pre>
<h3>3. Hello World: Generar Makefiles con CMake y compilar</h3>
<p>En linux el modo por default es generar <strong>Makefiles</strong>, así que entramos al directorio build que actualmente está vacío y generamos los <strong>Makefiles</strong>:</p>
<pre>~/Documentos$ <strong>cd holaMundoCMake
</strong>~/Documentos/holaMundoCMake/$ <strong>cd build
</strong>~/Documentos/holaMundoCMake/build$ <strong>cmake ../</strong>
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ariel/Documentos/holaMundoCMake/build</pre>
<p>Listo, ya estan los Makefiles generados, ahora a compilar con make:</p>
<pre>~/Documentos/holaMundoCMake/build$ <strong>make</strong>
Scanning dependencies of target milib
[ 50%] Building CXX object src/milib/CMakeFiles/milib.dir/milib.o
Linking CXX static library ../../bin/libmilib.a
[ 50%] Built target milib
Scanning dependencies of target holaMundo
[100%] Building CXX object CMakeFiles/holaMundo.dir/src/hola.o
Linking CXX executable bin/holaMundo
[100%] Built target holaMundo
ariel@surfer:~/Documentos/eclipse/holaMundoCMake/build$ make clean
ariel@surfer:~/Documentos/eclipse/holaMundoCMake/build$ make
[ 50%] Building CXX object src/milib/CMakeFiles/milib.dir/milib.o
Linking CXX static library ../../bin/libmilib.a
[ 50%] Built target milib
[100%] Building CXX object CMakeFiles/holaMundo.dir/src/hola.o
Linking CXX executable bin/holaMundo
[100%] Built target holaMundo</pre>
<p>En el directorio <strong>build/bin</strong> se encuentra el binario holaMundo,</p>
<pre>~/Documentos/holaMundoCMake/build$ <strong>cd bin/</strong>
~/Documentos/holaMundoCMake/build$ <strong>./holaMundo</strong>
Hola mundo desde main
[0] Hola Mundo, desde 'milib'
[1] Hola Mundo, desde 'milib'</pre>
<p>¡Listo! ¿Quién dijo que habría que generar Makefiles a mano? Generar <strong>CMakeLists.txt</strong> es mucho mas fácil y mas intuitivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://zarzamora.com.mx/archivo-historico/501/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>¿Anjuta, Eclipse, NetBeans, Geany, KDevelop? Y el ganador es&#8230;</title>
		<link>http://zarzamora.com.mx/archivo-historico/473</link>
		<comments>http://zarzamora.com.mx/archivo-historico/473#comments</comments>
		<pubDate>Mon, 01 Sep 2008 19:01:23 +0000</pubDate>
		<dc:creator>Desert Zarzamora</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[anjuta]]></category>
		<category><![CDATA[cmake]]></category>
		<category><![CDATA[comparacion]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[kdevelop]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[makefile]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://zarzamora.com.mx/?p=473</guid>
		<description><![CDATA[El orgulloso ganador luego de haber sido ignorado en la primer etapa es: Eclipse + CMake Eclipse se impone sobre netBeans justo en la recta final. Eclipse Ganymede con CMake funciona perfecto, se integran muy bien y hasta hay un plugin de CMake para Eclipse. Hacer Makefiles me asustaba, pero con CMake es un paseo. [...]]]></description>
			<content:encoded><![CDATA[<p>El orgulloso ganador luego de haber sido ignorado en la primer etapa es:</p>
<h2 style="text-align: center;"><strong><span style="color: #808080;">Eclipse + CMake</span></strong></h2>
<blockquote><p><em>Eclipse se impone sobre netBeans justo en la recta final.</em></p></blockquote>
<p>Eclipse Ganymede con CMake funciona perfecto, se integran muy bien y hasta hay un plugin de CMake para Eclipse. Hacer Makefiles me asustaba, pero con CMake es un paseo.</p>
<p>La única queja es que Eclipse está escrito en Java y es mas lento que los que estan escritos en C++.</p>
]]></content:encoded>
			<wfw:commentRss>http://zarzamora.com.mx/archivo-historico/473/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
