Pregunta

Tengo una plantilla de archivo MAKE para compilar una única DLL (para un sistema de complementos).El archivo MAKE del usuario se ve así:

EXTRA_SRCS=file1 file2
include makefile.in

En el makefile.in Tengo:

plugin.dll: plugin.os $(patsubst %,%.os,$(EXTRA_SRCS))

Dónde plugin.os es el archivo principal de C++ que se compilará.Por cierto, el final de los archivos es .os son los archivos objeto compilados para la biblioteca compartida (es decir,utilizando el -fpic opción con gcc)

Ahora, el problema es que las fuentes adicionales probablemente (pero no necesariamente) serán archivos de encabezado.Idealmente me gustaría agregarlos como dependencias para el objetivo. plugin.os y el file.cpp, pero sólo si existen.

El método debería funcionar tanto para Windows como para Linux, o al menos ser adaptable a cada uno.Sin embargo, sólo uso la versión GNU de make.

¿Fue útil?

Solución

Utilice el " comodín " función:

$(wildcard *.h)

EDITAR: para que coincida con una lista específica, haga

$(wildcard $(HEADER_FILES))

No es necesario usar $ (filtro ...), la función comodín filtra automáticamente los archivos que no existen.

Otros consejos

No especificó qué compilador (es) está utilizando, pero si tiene acceso a gcc / g ++ puede usar la opción -MM.

Lo que hago es crear un archivo con la extensión .d para cada archivo .c o .cpp, y luego " include " los archivos .d Yo uso algo como esto en mi Makefile:

%.d: %.c
        gcc $(INCS) $(CFLAGS) -MM $< -MF $@

%.d: %.cpp
        g++ $(INCS) $(CXXFLAGS) -MM $< -MF $@

Luego creo las dependencias como esta:

C_DEPS=$(C_SRCS:.c=.d)
CPP_DEPS=$(CPP_SRCS:.cpp=.d)
DEPS=$(C_DEPS) $(CPP_DEPS)

y esto en la parte inferior del Makefile:

include $(DEPS)

¿Es este el tipo de comportamiento que busca? La belleza de este método es que incluso si está utilizando un compilador que no es GNU para la compilación real, los compiladores GNU hacen un buen trabajo al calcular las dependencias.

¿El simple

$(filter $(wildcard *.h),$(HEADER_FILES))

¿haces lo que quieres?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top