2010-04-09 21 views
25

(estoy ejecutando Linux Ubuntu 9.10, por lo que la extensión de un archivo ejecutable es archivo ejecutable.out) Acabo de ingresar a la programación modular (programación con múltiples archivos) en C y quiero saber cómo compilar varios archivos en un solo archivo MAKE. Por ejemplo, ¿cuál sería el archivo MAKE para compilar estos archivos: main.c, dbAdapter.c, dbAdapter.h? (Por cierto, si aún no lo ha descubierto, la función principal está en main.c) ¿También podría alguien publicar un enlace a la documentación de un archivo MAKE?Compila múltiples archivos C con make

Respuesta

26

Ver mi Makefile Tutorial: How To Write A Makefile. Proporciona un Makefile bien diseñado que construirá un proyecto de este tipo (con múltiples archivos fuente de C y C++), explica cómo funciona y advierte sobre peligros comunes y malas prácticas de mapeo que son demasiado comunes para encontrarse en la naturaleza. .

+1

Acabo de actualizarlo y estaría encantado de escuchar sus comentarios. –

+2

Link está muerto a partir de ahora. – Pat

+0

@MichaelAaronSafyan Dado que está buscando soporte multiplataforma, ¿tiene algún consejo para limpiar el archivo de programa cuando en Windows se envía a $ (program_NAME) .exe? –

32

Los enlaces publicados son todos buenos. Para tu caso particular, puedes probar esto. Esencialmente, todos los Makefiles siguen este patrón. Todo lo demás son atajos y macros.

program: main.o dbAdapter.o 
    gcc -o program main.o dbAdapter.o 

main.o: main.c dbAdapter.h 
    gcc -c main.c 

dbAdapter.o dbAdapter.c dbAdapter.h 
    gcc -c dbAdapter.c 

La clave aquí es que el Makefile mira reglas secuencialmente y construye son necesarios como ciertos artículos.

Primero verá el programa y verá que para crear el programa necesita algo llamado main.o y dbAdapter.o.

A continuación, encontrará main.o. Sin embargo, para compilar main.o, necesitará main.c y dbAdapter.h (supongo que dbAdapter.h se incluye en main.c).

Utilizará esas fuentes para compilar main.o compilando usando gcc. El -c indica que solo queremos compilar.

Hace lo mismo con dbAdapter.o. Cuando tiene esos dos archivos objeto, está listo para vincularlos. Utiliza el compilador gcc para este paso también. El -o indica que estamos creando un archivo llamado programa.

+3

... excepto que no debe codificar el compilador, y debe aprovechar las reglas de compilación predefinidas ... vea mi tutorial. –

+5

Bueno, por supuesto, tienes razón. Pero el OP es relativamente nuevo en Makefiles y solo quería mostrar el proceso subyacente sin ningún tipo de indirección. – aduric

+3

"Pero el OP es relativamente nuevo para los Makefiles", lo que debería hacer que lo inicie por el camino correcto en lugar de poner errores comunes en su primer ejemplo. – mk12

Cuestiones relacionadas