Soy nuevo en makefiles. Aprendí creación de archivos y otros conceptos relacionados del libro "Gestionar proyectos con GNU make". El archivo MAKE está listo ahora y necesito asegurarme de que el que creé esté BIEN. Aquí está el archivo MAKEArchivo simple con versiones de lanzamiento y depuración - Mejores prácticas
#Main makefile which does the build
#makedepend flags
DFLAGS =
#Compiler flags
#if mode variable is empty, setting debug build mode
ifeq ($(mode),release)
CFLAGS = -Wall
else
mode = debug
CFLAGS = -g -Wall
endif
CC = g++
PROG = fooexe
#each module will append the source files to here
SRC := main.cpp
#including the description
include bar/module.mk
include foo/module.mk
OBJ := $(patsubst %.cpp, %.o, $(filter %.cpp,$(SRC)))
.PHONY:all
all: information fooexe
information:
ifneq ($(mode),release)
ifneq ($(mode),debug)
@echo "Invalid build mode."
@echo "Please use 'make mode=release' or 'make mode=debug'"
@exit 1
endif
endif
@echo "Building on "$(mode)" mode"
@echo ".........................."
#linking the program
fooexe: $(OBJ)
$(CC) -o $(PROG) $(OBJ)
%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o [email protected]
depend:
makedepend -- $(DFLAGS) -- $(SRC)
.PHONY:clean
clean:
find . -name "*.o" | xargs rm -vf
rm -vf fooexe
Preguntas
- El makefile dado anteriormente funciona bien con la liberación y versiones de depuración. ¿Pero está en el formato correcto? ¿O ves algún defecto en eso?
- Por encima de makefile depura la compilación de forma predeterminada cuando se invoca utilizando make. Para compilaciones de lanzamiento, make mode = release es obligatorio. ¿Es este el enfoque correcto?
- ¿Los indicadores del compilador de depuración y liberación suministrados a g ++ son correctos? Para la depuración, uso -g -Wall y, para su lanzamiento, solo -Wall. ¿Es esto correcto?
Cualquier ayuda sería genial.
¿Está pensando en liberar la fuente de su software, incluido el Makefile? ¿O solo estás enviando binarios? es decir. ¿Alguien más que tú y tu equipo verán y usarán este Makefile? – Schwern
Sí. Voy a lanzar el código fuente ya que este será un proyecto de código abierto. –