Git Product home page Git Product logo

Comments (3)

RaniAgus avatar RaniAgus commented on July 27, 2024 1

¡Buenas! ¿Cómo va?

  1. Por lo que tengo entendido, el makefile lee las macros de arriba hacia abajo, o sea que para agregarle a PROJECTS los proyectos que ustedes quieran no hace falta que tengan un target. Hasta podés hacer que primero se agreguen los proyectos de cada módulo y luego concatenar los que van para todos, creo que así quedaría más sencillo de leer:
# Con != es lo mismo que si hicieras = $(shell ...)
GIT_BRANCH != git rev-parse --abbrev-ref HEAD

KERNEL_PROJECT=kernel
MEMORIA_PROJECT=memoria swamp

ifeq ($(GIT_BRANCH), dev/kernel)
  PROJECTS = $(KERNEL_PROJECT)
else ifeq ($(GIT_BRANCH), dev/memoria)
  PROJECTS = $(MEMORIA_PROJECT)
else ifeq ($(GIT_BRANCH), dev/swap)
  PROJECTS = $(MEMORIA_PROJECT)
else
  PROJECTS = $(KERNEL_PROJECT) $(MEMORIA_PROJECT)
endif

PROJECTS += carpincho_dummy carpincho_dummy2 carpincho_dummy3 tests
LIBS=static matelib

# Después de compilar todas las dependencias en $(PROJECTS), hace el echo
all: $(PROJECTS)
	@echo "Usaste makefile para la rama \"$(GIT_BRANCH)\" y compilaste \"$(PROJECTS)\""

$(PROJECTS): $(LIBS)
	$(MAKE) --no-print-directory -C $@ all

$(LIBS):
	$(MAKE) --no-print-directory -C $@ all

clean:
	$(foreach P, $(LIBS) $(PROJECTS), $(MAKE) --no-print-directory -C $P clean;)

release:
	$(foreach P, $(LIBS) $(PROJECTS), $(MAKE) --no-print-directory -C $P release;)

.PHONY: all $(PROJECTS) $(LIBS) clean release

Por cierto, si sirve como otro feature, nosotros agregamos una regla extra en los makefile de cada módulo para que elimine los archivos generados por valgrind cuando debugeamos con vscode

¡Buenísimo! Lo voy a tener en cuenta, quizás lo agregue a make clean directo, ya que si a rm le pasás varios archivos te los elimina todos:

clean:
	$(RM) $(OBJDIR) $(BINARY) *.log vgcore.*

¿Cómo se generan esos cores? No conocía esa feature 😛

Creo que entendí mi error jaja, me había mareado un poco, por el hecho de tener una macro y target con mismo identificador. Cuando usabas el target con $ era para que se expanda, como con las macros normales, no? Nunca me había topado con eso e hice cualquier cosa xD.

Claaro, estaban teniendo un target $(CHECK_GIT) cuyo valor al expandirlo es vacío:

carpincho_dummy carpincho_dummy2 carpincho_dummy3 tests: static matelib
	make --no-print-directory -C $@ all

Cuando ponés varios targets para la misma regla es lo mismo que hacer lo siguiente:

carpincho_dummy: static matelib
	make --no-print-directory -C carpincho_dummy all

carpincho_dummy2: static matelib
	make --no-print-directory -C carpincho_dummy2 all

carpincho_dummy3: static matelib
	make --no-print-directory -C carpincho_dummy3 all

tests: static matelib
	make --no-print-directory -C tests all

Entonces te estaba compilando solo lo que está en PROJECTS sin la parte del if, que no se estaba ejecutando nunca ya que aparece después de la regla all.

Espero haberme explicado bien 😅

Saludos

from so-project-template.

neverkas avatar neverkas commented on July 27, 2024 1

Genial, gracias más claro imposible :D ahí entendí ciertos detalles que se me pasaron por alto sobre makefile jaja :D

Esos cores no estoy seguro si se nos generaban porque probábamos el proyecto vía terminal con valgrind ó cuando debugeabamos con vscode, porque usábamos ambos al mismo tiempo jaja. El tema es que se nos iban acumulando en la raíz de cada módulo, y el clean por el momento parecía no contemplarlos (no me fijé del todo el makefile de los módulos porque no estoy a ese nivel jaja, sólo se lo básico así que agregué esa regla jeje)

Gracias por tomarte tu tiempo en explicarme, se agradece un montón :)

from so-project-template.

neverkas avatar neverkas commented on July 27, 2024

Creo que entendí mi error jaja, me había mareado un poco, por el hecho de tener una macro y target con mismo identificador. Cuando usabas el target con $ era para que se expanda, como con las macros normales, no? Nunca me había topado con eso e hice cualquier cosa xD.

from so-project-template.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.