Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Entornos De Desarrollo En Linux

Iniciado por DraKKaR, 07 de Septiembre de 2003, 06:26:34 PM

« anterior - próximo »

DraKKaR

 Hola, estoy portando mi motor a Linux, y me preguntaba cual seria el camino adecuado a seguir:
1- hacerlo todo desde la linea de comandos (a base de automake, make, configure...)
2- Utilizar un entorno de desarrollo como el kdevelop.
2.1- En caso de usar el kdevelop, cual seria el mejor (en caso de que haya otro)

Por ahora estoy haciendo el makefile para que se compile con un simple make. EL problema que he visto a esto es que para que se compilen los ficheros adecuados tienes que especificarselos en el makefile... Es decir, si un fichero hace referencia a muchos *.h tengo que incluirle a mano esos *.h para que, si cambio alguno de ellos, recompile este fichero. El problema, es que hacer esto a mano no me mola, deberia haber alguna manera de que se generase el Makefile con todas las dependencias de ficheros bien puestas, segun los #include que tenga el fichero a compilar. Tengo entendido que el automake haria eso. Lo he estado mirando por encima y me parece algo confuso la retaila de ficheros y cosas que se requieren.

¿Alguien tiene algo de esperiencia en esto?

Zaelsius

 En efecto, automake es un programa algo complejo al principio.

Sobre el entorno de desarrollo a utilizar, pues tratandose de C/C++ en linux... está claro k tendrás k tener tu makefile y tal, el IDE que utilices deberia(y de hecho es) independiente de como organices la estructura física de tu proyecto.

Cuando compilas en KDevelop, Anjuta, etc, sólo llamas al makefile con algun k otro parámetro... y cuando depuras visualmente en realidad el IDE te muestra la información que le proporciona gdb. Supongo que todo esto lo sabias, pero asi de paso la gente k lo lea ya se entera. Yo personalmente suelo usar vi a secas para cositas pequeñas o Anjuta para proyectos de mayor tamaño. Si te lo montas bien, bastaria un archivo de proyecto para Anjuta/KDev(linux) y otro para Vstudio(windows) para tener un proyecto totalmente portable.

Tb recuerdo que VisualStudio lee sin problemas los ficheros de texto con formato linux, y viceversa creo k tb(en mi combinacion de distro/compilador/etc).

Edit: aunque VStudio no utiliza archivos makefiles visibles para el programador, se pueden utilizar si así se desea.Y Anjuta, al crear un nuevo proyecto, analiza las dependencias y crea un nuevo makefile por ti(a veces puede fallar). No sé si KDevel.. tb genera makefiles automáticamente.

Amatar

 Tengo hecha alguna cosa que complila en windows y gnu/linux y para la parte linux primero use el KDevelop, que lo que hace es generarte los ficheros de automake y te los gestiona sin que te enteres, pero yo le encontre un problema, que no se si se debe al automaque o al kdevelop, todos los ficheros tenian que estar dentro del directorio principal del proyecto y yo queria tener los fuentes aparte, asi que termine haciendo el makefile a mano.

Por cierto, el Visual Studio tiene una opcion para salvar los makefiles, creo que no estan en el formato del make de gnu, pero te indica las dependencias.
a historia comienza con un huevo...

Cojoncio Arena:Severancio Güarrior
http://www.cojoncioarena.com

Zaelsius

 Anjuta mete los README, Makefile, etc en el directorio principal, y el código fuente bajo /src. Este es el comportamiento por defecto, no sé si se podrá cambiar(ahora mismo toi en guindous)

TheWind

 LIsta de entornos para linux:

Kdevelop
Kde Studio (semi free, version de pago y version gpl?)
Anjuta
Eclipse (Tb en windows)
Forte (tb en windows y no solo java)
Kylix (c/c++ y delphi.. gratis para programas gpl)

Además de estos hay como tropecientos mas menos conocidos (wide,etc..).

En cuanto a que kdevelop te obligue a tener todos los archivos dentro del directorio del proyecto es lógico, aunque puedes organizarlos en varios subdirectorios.


DraKKaR

 Muchas gracias por responder... ¿cual es el que mas os gusta de sos entornos de desarrollo que me habeis nombrado?

Creo que al final me hare un pequeño script que te genere un makefile inspeccionando los *.c. Usaria el automake, pero la mayor parte de su complejidad no la necesito. Ya lo posteare como COTW si os interesa.

ethernet

 WEEE !! ;) puedes usar glob de python para generar los makefiles con todos los .c y .h

DraKKaR

 ethernet, pero el glob sirve para buscar ficheros en un directorio. Lo que yo quiero es, dado un fichero cpp o h, saber que #includes hay dentro de cada uno, para meterlos como dependiencias al compilar cada fichero en el makefile.

Tei

Cita de: "DraKKaR"ethernet, pero el glob sirve para buscar ficheros en un directorio. Lo que yo quiero es, dado un fichero cpp o h, saber que #includes hay dentro de cada uno, para meterlos como dependiencias al compilar cada fichero en el makefile.
no soy muy de linux o filtros, pero seria algo parecido a


cat *.c | grep "#include" | sort | uniq | awk '{ print $1 $2}' | grep -v '//'

ó

$ cat *.c | grep "#include" | sort | uniq | awk '{ print $1 " " $2}' | uniq | grep -v '//'



esto da por echo que todos los files estan en el mismo directorio.
es la primera vez en mi vida que uso awk :D

normalmente para estas cosas tiro de un script de perl :D

Esto lo he echo en windows-cygwin, no lo he probado en linux pero seguro que funcionara igual.

Mars Attacks

 Supongo que con un script y la solución de Tei podrías automatizar el tema del make. Seguramente si preguntas en el foro de la uji directamente tu problema, los superfrikis te lo arreglarán en dos líneas en cualquier lenguaje que elijas. Hasta en brainfuck.

ethernet

 *ejem* jugando un poco con regexp...



import re,glob;
regexp = re.compile("^\s*#.*include.*[<\"](?P<inc>.*?)[>\"]")
for x in glob.glob("*.c"):
f = open(x,"r");
lines = f.readlines();
f.close();
for y in lines:
               m = regexp.match(y);
               if( m != None):
                  print m.group('inc');


edit: en python identar es necesario pero el puto BBcode me la esta chupando mil


import re,glob;
regexp = re.compile("^\s*#.*include.*[<\"](?P<inc>.*?)[>\"]")
for x in glob.glob("*.h"):
       f = open(x,"r");
       lines = f.readlines();
       f.close();
       for y in lines:
               m = regexp.match(y);
               if( m != None):
                       print m.group('inc');



DraKKaR

 Gracias a todos por esos códigos, pero la verdad es que anoche acabé el script en shell-script. Lo he hecho un poco mas complicadillo: por cada *.c en la lista, añade a la lista todos los #include que hace referencia ese *.c. Ademas de eso, por cada #include, se añaden a la lista los includes que hay dentro de ese include, recursivamente. Asi al final tengo una lista de todos los *.h que afectan a un *.c, directa o indirectamente.

Esto te generara un bonito Makefile.
La lista de *.c a compilar se le especifica en un fichero, al igual que las opciones de compilacion.

Mars Attacks

 Va, no te hagas el remolón y pastea el código, que tengo curiosidad. ¿Has usado un find para buscar recursivamente por las carpetas o supones que está todo en el mismo directorio?

ethernet

 o mandalo al cotw con un pequeño comentario ;) eth_cotd@lycos.es  

DraKKaR

 Lo mandare como cotw, que me hace ilu hacer alguno de vez en cuando XDD

Mars, no uso find, los ficheros que quieras incluir los listas en un fichero, y si estan en otros directorios, pues pones sus rutas relativas o absolutas, y esos ficheros son los que se inspeccionarán.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.