Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: DraKKaR en 07 de Septiembre de 2003, 06:26:34 PM

Título: Entornos De Desarrollo En Linux
Publicado por: DraKKaR en 07 de Septiembre de 2003, 06:26:34 PM
 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?
Título: Entornos De Desarrollo En Linux
Publicado por: Zaelsius en 07 de Septiembre de 2003, 07:00:15 PM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: Amatar en 07 de Septiembre de 2003, 07:27:35 PM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: Zaelsius en 07 de Septiembre de 2003, 09:21:53 PM
 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)
Título: Entornos De Desarrollo En Linux
Publicado por: TheWind en 08 de Septiembre de 2003, 09:26:44 AM
 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.

Título: Entornos De Desarrollo En Linux
Publicado por: DraKKaR en 08 de Septiembre de 2003, 12:25:20 PM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: ethernet en 09 de Septiembre de 2003, 09:24:51 AM
 WEEE !! ;) puedes usar glob de python para generar los makefiles con todos los .c y .h
Título: Entornos De Desarrollo En Linux
Publicado por: DraKKaR en 09 de Septiembre de 2003, 03:16:30 PM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: Tei en 09 de Septiembre de 2003, 05:12:05 PM
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.
Título: Entornos De Desarrollo En Linux
Publicado por: Mars Attacks en 09 de Septiembre de 2003, 05:38:54 PM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: ethernet en 10 de Septiembre de 2003, 08:19:03 AM
 *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');


Título: Entornos De Desarrollo En Linux
Publicado por: DraKKaR en 10 de Septiembre de 2003, 11:39:35 AM
 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.
Título: Entornos De Desarrollo En Linux
Publicado por: Mars Attacks en 10 de Septiembre de 2003, 12:42:03 PM
 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?
Título: Entornos De Desarrollo En Linux
Publicado por: ethernet en 10 de Septiembre de 2003, 01:01:52 PM
 o mandalo al cotw con un pequeño comentario ;) eth_cotd@lycos.es  
Título: Entornos De Desarrollo En Linux
Publicado por: DraKKaR en 10 de Septiembre de 2003, 01:32:59 PM
 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.