es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una biblioteca estática para los archivos ubicados en múltiples directorios sin especificar los nombres de los archivos en el Makefile.

Necesito crear una biblioteca estática utilizando archivos fuente en diferentes directorios. Soy capaz de crear la biblioteca estática especificando cada archivo fuente en el Makefile. Esto aumentó el contenido del Makefile.
Permítanme explicar lo que hice con un ejemplo:

Es más complicado para mí especificar cada archivo fuente en FILES. Estoy tratando de encontrar una alternativa a este problema

Files = Source1\A.c Source\B.c Source2\C.c Source3\D.c ……….. Sorce3/Z.c

$(OUT_FILE_NAME): $(patsubst %.c,%.o,$(wildcard $(FILES)))
ar -r -o $@ $^

Compilando cada *.c a *.o

%.o: %.c dirmake
arm-none-eabi-gcc -c -o $@ $<

Estoy buscando una forma alternativa de especificar todos los archivos fuente en el Makefile. Esto nos ayudará a no tener que modificar este Makefile nuevamente si se agrega algún nuevo archivo fuente. ¿Es posible hacer eso?
Intenté buscar una solución para este problema y muchas fuentes explican cómo crear una biblioteca estática, pero no veo ninguna solución alternativa para este problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una solución alternativa para especificar cada archivo fuente en el archivo Makefile. Una opción es utilizar la función wildcard para encontrar automáticamente todos los archivos fuente en los directorios especificados. Aquí tienes un ejemplo:

    SRC_DIRS := Fuente1 Fuente2 Fuente3
    
    SRCS := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
    
    $(OUT_FILE_NAME): $(patsubst %.c,%.o,$(SRCS))
        ar -r -o $@ $^
    
    %.o: %.c dirmake
        arm-none-eabi-gcc -c -o $@ $<
    

    En este ejemplo, primero definimos los directorios donde se encuentran los archivos fuente (SRC_DIRS). Luego, utilizamos un bucle foreach para aplicar la función wildcard a cada directorio y encontrar todos los archivos *.c en ellos. La lista resultante de archivos fuente (SRCS) se utiliza en la regla del Makefile para construir la biblioteca estática.

    Con este enfoque, no es necesario modificar el Makefile de nuevo si se agrega un nuevo archivo fuente a uno de los directorios de origen. Solo necesitamos actualizar la variable SRC_DIRS en consecuencia.

    Ten en cuenta que este enfoque asume que todos los archivos fuente tienen nombres únicos en todos los directorios de origen. De lo contrario, podríamos terminar con archivos objeto duplicados y errores del enlazador.

Comments are closed.