Necesito ayuda con la compilacion en emacs

emacs

Buenas hace poco que he instalado linux en mi portatil y realmente es la 1º vez que lo utilizo por lo que no tengo ni idea de como manejarlo. Concretamente tengo la distribucion Ubunto y la version 7.04

Mi problema reside en que emacs no me compila. Yo escribo cualquier programa en C, y desde tool le doy a compile. Y me dice que: "no hay ninguna regla para construir el objetivo ".

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de david.villa

Si el programa...

…que quieres compilar es un único fichero no necesitas tener un fichero Makefile.

Cuando ejecutes “Tools”->“Compile…” el cursor se irá al minibuffer (la línea de texto debajo de la barra de estado). En ese momento pone:

Compile command: make -k

Simplemente escribe el nombre del fichero que quieres compilar pero sin la extensión, por ejemplo miprograma y pulsa ENTER.

Entonces make sabe que para crear ese fichero que le pides (el binario) tiene que compilar un fichero fuente que tenga el mismo nombre. Cuando vea un fichero tal que miprograma.c sabe que tiene que utilizar el compilador de C para lograrlo, y voilá.

Como verás, compilar con emacs tiene muchas ventajas respecto de la consola, entre ellas la de poder encontrar fácilmente los errores que detecte el compilador (simplemente pinchando con el ratón).

Y eso es todo, bienvenido al maravilloso (aunque al principio frustrante) mundo de GNU.

PD: Como te han dicho por ahí, es mejor que envíes las consultas a la lista de correo en lugar de a la web.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Realmente asi es como lo

Realmente asi es como lo hacia. Y la frase que puse en el post de arriba aparecia después de haberle puesto "mi programa" a la frase .....make -k

Por los consejos que me habeis dado y el enlace a la receta que han hecho tambien aquí, creo que realmente el problema resida en que no he puesto las librerias de c. Voy a trastear un poco más y si no consigo hacer nada, os pedire ayuda de nuevo en la lista de correo.

Solo los peces muertos siguen la corriente.

No tiene por qué ser por

No tiene por qué ser por las librerias. Si son estándar no hay que ponerlas.

El problema es que cuando le dices “Compile file” y te sale el make -k tu le das al Enter sin más. Osea, es como si ejecutas make -k en el terminal. El make busca un fichero Makefile, GNUMakefile o makefile en el mismo directorio que ese archivo y ejecuta la regla por defecto (la primera).

Otro posible error es que le des un nombre que no coincide exactamente con el del archivo .c (quitando la extensión). Entonces trata de buscar una regla con ese nombre en el Makefile.

Si el archivo .c es el único fichero fuente del ejecutable el make es suficientemente listo como para construir el ejecutable sin hacer un Makefile, siempre que le digas que quieres hacer un ejecutable con el mismo nombre que el .c (quitando la extensión).

Si tienes que añadir alguna biblioteca, o añadir más archivos fuente al ejecutable no te queda más remedio que hacer un Makefile. Por ejemplo, para añadir la biblioteca libreadline:

# Ejemplo de Makefile
LDLIBS=-lreadline

Si además el ejecutable tiene más de un archivo fuente:

# Ejemplo de Makefile
LDLIBS=-lreadline
ejecutable: ejecutable.o ficheroFuente2.o ficheroFuente3.o

Es muy importante seguir una serie de reglas para que sea fácil hacer el makefile:

  • El ejecutable siempre se llama igual que un archivo fuente (salvo por la extensión, que no lleva)
  • La regla para construir el ejecutable siempre tiene a continuación del nombre del ejecutable (separado por “:” ) el nombre del fichero objeto correspondiente al archivo fuente del mismo nombre (simplemente sustituye el .c por un .o)
  • En los archivos fuente hay que usar extensiones conocidas por make (los ficheros C acaban en .c, los ficheros C++ acaban en .cc, .C, .cxx o .cpp, …)

Si se complica mucho la cosa (muchos subdirectorios, soporte de varias plataformas, bibliotecas dinámicas) te recomiendo automake/autoconf/libtool (receta pendiente?).

Imagen de int-0

Bueno...

...tal vez sea un poco "brusco" meterse a usar emacs para editar y compilar proyectos... yo no compilo desde emacs, tengo un emacs abierto con mi código y compilo desde un terminal. De todas formas tu problema se deba porque no tienes un Makefile creado.

Crea un Makefile para tu proyecto: de esta forma automatizas la compilación y limpieza de tu directorio de trabajo. Incluso si tu proyecto es simple, el Makefile lo será más todavía (echa un ojo al articulo sobre make, en el recetario).

------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Lo que es heavy heavy es

Lo que es heavy heavy es compilar C++ en el terminal...

Hay que echarle valor para leer errores de 10 líneas en los que hay 10 o 15 templates anidadas. Cuesta encontrar la línea del error.

Yo conozco gente que no usa emacs pa na excepto pa compilar. Pruebalo, te costará cambiar.

Imagen de int-0

Ctrl + Shift + Re Pág

...y subo hasta el primer error y lo corrijo...

------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Y lees 10 o 15 líneas de

Y lees 10 o 15 líneas de templates anidadas para intentar encontrar cuál es el archivo donde ha dado el error y que de verdad hay que corregir... todo un machote...

Imagen de int-0

Supongo...

...que todavía no me he encontrado en la tesitura, porque me sigue pareciendo algo sencillo...
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de Lk2

Vamos por partes

Lo primero es Ubuntu Eye-wink

Segundo, Ubuntu no es Linux, es algo-parecido-a-GNU-Linux, porque no solo tendrás instalado el kernel...

Tercero: para preguntar usa mejor la lista de correo, pero venga, aceptamos barco Eye-wink

No compilo desde Emacs porque soy "newbie" en él, pero ese error me suena al que da el comando "make" en una terminal cuando no existe un archivo Makefile...

Imagen de brue

Realmente...

... te digo "no te pases con el chico que es nuevo", aunque lo que quiero es ver cómo queda mi nueva foto de "oh! rly?".

--
PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}

brue