2010-08-19 6 views
1

J'ai un fichier makefile contenant des règles pour construire le système, les tester et les exécuter. Le dernier élément est exécuté en appelant simplement un script shell. Cela m'empêche, entre autres, d'exécuter les tests en parallèle.Comment puis-je faire une règle makefile exécuter ses conditions préalables?

je les variables suivantes:

TEST_SRC=$(wildcard tests/*.c) 
TESTS=$(patsubst %.c,%,${TEST_SRC}) 

et construit les essais avec la règle

$(TESTS): %: %.c 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $< 

Est-il possible (et si oui, comment?) Pour créer une règle des "tests" que, lorsqu'il est exécuté, exécutera chaque élément de la variable $TESTS?

Répondre

5

Vous pouvez le faire de cette façon:

# a separate target to run each test 
RUN_TESTS = $(addprefix run_, $(TESTS)) 

# a pattern rule for those targets, which will remake the test iff neccessary 
.PHONY: $(RUN_TESTS) 
$(RUN_TESTS):run_%:% 
    ./$< 

# One Rule to Ring Them All, One Rule to... sorry. 
.PHONY: tests 
tests: $(RUN_TESTS) 
+0

Merci beaucoup! – Tordek

0

Je crois qu'une règle comme ceci:

run_tests: $(TESTS) 

devrait faire l'affaire:

$ make run_tests 

Il n'exécutera rien, mais il aura $(TESTS) en tant que dépendance et de les exécuter d'abord.

+0

$ (TESTS) est la règle selon laquelle _builds_ les tests. Ce serait gênant si je voulais relancer les tests, car cela reviendrait à les recompiler. – Tordek

+0

Plus précisément, les tests ne seront pas exécutés. – Beta