Compilación de proyectos en C++

Grissom.

Lanero Reconocido
15 Dic 2003
3,948
Saludos,

Tengo un proyecto, inicial aún, en C++, tengo varias inquietudes:
  • En Linux puedo obtener listado de los Includes, de los Paths de los Libs con el comando pkg-config; ejemplo: pkg-config --cflags gtk+-2.0 me arrojaría los Includes necesarios para Gtk+ 2.0, pero no encuentro forma de incluir el comando en el Makefile, me toca copiar la ruta y pegarla estáticamente. ¿Existe alguna forma de dinámicamente generar la ruta con el comando, en lugar de quemarla en el Makefile?.
  • Cómo hago para compilar un directorio completo sin necesidad de decirle uno por uno los archivos "gcc -c archivo1.cpp archivo2.cpp -o builddir" ... en lugar decirle todo lo que está en un directorio, incluyendo subdirectorios.
  • En proyectos C++/GNU es recomendable emplear un directorio "src" y un "build" para la salida, o es mejor (como he visto en algunos sources) en el raíz del proyecto poner los fuentes y los binarios generados, todo junto.
Sinceramente, gracias cualquier sugerencia.
 
Hola como estás grissom, aquí algunas sugerencias:
1. para compilar un archivo o dos está bien darle el nombre, pero para varios como lo deseas, es mejor utilizar variables y la reglas generalizadas, por favor lee un tutorial de makefile: http://www.opussoftware.com/tutorial/TutMakefile.htm, en internet existen varios o te recomiendo el libro de makefile: http://www.amazon.com/Managing-Proj...3764845?ie=UTF8&s=books&qid=1176495377&sr=8-1

2. Utilize una estructura gerarquica como build y src (básica para proyectos simples) o utilize la de cualquier paquete de linux (bin, src, include, lib, etc) la vaina es que escoja una en que usted se sienta bien y entienda donde tiene las cosas.

Nos vemos.
 
Bien, buen dato el del libro GNU Make, gracias por el dato.

Por otro lado, encontré la forma de involucrar comandos en el Makefile y es con "$(shell comando)" ... tocaba reeplazar "comando" con el correspondiente.

Gracias.
 
Hola rulas,

Grissom. dijo:
Saludos,

Tengo un proyecto, inicial aún, en C++, tengo varias inquietudes:
comercial o libre?

En Linux puedo obtener listado de los Includes, de los Paths de los Libs con el comando pkg-config; ejemplo: pkg-config --cflags gtk+-2.0 me arrojaría los Includes necesarios para Gtk+ 2.0, pero no encuentro forma de incluir el comando en el Makefile, me toca copiar la ruta y pegarla estáticamente. ¿Existe alguna forma de dinámicamente generar la ruta con el comando, en lugar de quemarla en el Makefile?.
no solo pkg-config, otras aplicaciones incluyen [nombre de la app]-config para obtener esta información.

Lo que se usa en estos casos son generadores de Makefiles o herramientas de construccion, puedo afirmar que auto-tools (automake, autoconf) es lo mas usado, pero ya es obsoleto, en su lugar esta cogiendo mucha fuerza cmake, existen otros como scons, jam, qmake (para proyectos Qt). Existe uno que te recomiendo que mires llamado waf, solo depende de python, no usa make (es decir, no es un generador de makefiles)

aquí lo puedes mirar:
http://www.freehackers.org/~tnagy/bksys.html

sino, lo mas aconsejable es cmake

Cómo hago para compilar un directorio completo sin necesidad de decirle uno por uno los archivos "gcc -c archivo1.cpp archivo2.cpp -o builddir" ... en lugar decirle todo lo que está en un directorio, incluyendo subdirectorios.
lo recomendable es compilar uno por uno

En proyectos C++/GNU es recomendable emplear un directorio "src" y un "build" para la salida, o es mejor (como he visto en algunos sources) en el raíz del proyecto poner los fuentes y los binarios generados, todo junto.
es mejor emplear src para las fuentes, no solo en proyectos GNU

doc para documentacion
data para datos

etc...
 
krawek dijo:
comercial o libre? ...

Quiero hacerlo libre, pero no le veo mucha utilidad por ser tan particular la solución. Básicamente es una aplicación que funciona en puntos de ventas, captura la facturación de las ventas y produce unos XML que posteriormente se enviarán a una maquina central donde la información es procesada, esto es necesario porque no tengo red, internet entre las maquinas de los puntos de venta y el equipo central. Esta parte del punto de venta estoy evaluando hacerla en C++, ya que los equipos de los puntos de ventas son maquinas con limitado hardware (Pentium III, 256 de RAM), sin embargo corren Ubuntu bien. Probando unos prototipos en Java lo sentí muy pesado (eso que no tenían acceso aún a la base de datos de productos, lista de precios, ... . Yo no estoy haciendo negocio con el software, ni tengo planes de venderlo ni nada, por lo tanto no tengo problema en ponerlo libre, así no le sirva a nadie, pero se hace el gesto.

En todo caso estoy tantiando el terreno a penas, me ha resultado super fácil hacer las interfaces gráficas con Glade y jalar la información de los controles, pero ese Gtk está como tirando a Mono, C# y su combo, eso me tiene molesto, voy a tener que irme por Qt pese a que mi escritorio favorito es Gnome.

Y gracias por los datos, buena información !
 
Para la parte XML le sugiero utilizar las bibliotecas Xerces del proyecto
apache : http://xerces.apache.org/ , hay versiones para Java y para C++.

Pero OJO, XML por se un formato de tags agrega mucha información a la ya existente, luego resultará con archivos más grandes de lo normal, no le digo que no sirva sino que tenga en cuenta esto para el uso de memoría y espacio en disco.

Nos vemos.
 
Muy cierto, Qt es una API bien hecha, orientada a objetos, lo que he visto para C++ de Gtk es programación estructurada.

Hay un detalle que no veo en Qt: Gtk, en sus nuevas versiones, abolió la generación de código a partir de los archivos .glade (XML con la definición de la interface gráfica), en Qt con el equivalente .ui es necesario siempre generar código. Con esta característica Gtk viene dando una impresión más moderna en la forma de crear GUIs. Por otro lado, Qt tiene más controles, librerías más atractivas de acceso a base de datos, redes y otros elementos ... ¡esta decisión es un dolor de cabeza!

El asunto de elejir XML como el formato de intercambio, obedece más a requerimientos de negocio que a eficiencia/rendimiento; sucede que es en el momento el formato más aceptado para representar documentos virtuales. Técnicamente el punto que Ud dice es muy válido, XML es muy "verbose", por lo tanto agrega un volumen de información considerable.
 
krawek dijo:
Qt tambien puede generar interfaces dinamicamente a partir de XML desde hace muchisimos años:

Qt3:
http://doc.trolltech.com/3.3/qwidgetfactory.html

Qt4:
http://doc.trolltech.com/4.2/qformbuilder.html

Me parece que gtk se esta quedando obsoleto y no soy el unico que lo piensa, muchas personas de la comunidad gtk/gnome tambien:

http://blogs.gnome.org/view/uraeus/2007/03/15/1

¡Sí señor qué buen dato!, afortundamente andaba equivocado ... good bye Gtk ! ... je je ...

Gracias.
 

Los últimos temas