Comments (3)
¡Buenas! ¿Cómo va?
- 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.
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.
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)
- Fixear includes en el makefile de utils
- Agregarle un timestamp al nombre de los logs de valgrind
- Agregar regla `make start`
- Motivación para simular un Watch HOT 2
- Mudar docu a la wiki
- Hacer un proyecto que compile todos los srcs como archivos individuales
- Biblioteca compartida no reconoce a una función de una biblioteca estática HOT 3
- Testear modulos - Posibilidad de integrar funciones de los modulos a los Tests HOT 1
- Agregar soporte para CSpec HOT 4
- Agregar `--track-origins=yes` a Valgrind
- Pruebas varias a la fecha HOT 1
- Static Lib referenciable como Shared Lib HOT 3
- error al importar las commons HOT 7
- Agregar includes
- Ver cómo generar prerrequisitos automáticamente
- Obtener SRCDIR y BINDIR en el proyecto
- Aceptar otras estructuras de carpetas HOT 1
- Agregar una regla 'help'
- Permitir que memcheck y helgrind reciban parámetros
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from so-project-template.