Bonjour,

Je suis en train d'etudier un compilateur particulier, qui s'appelle AspectC++ pour programmer oriente aspect, mais je ne pense pas que ma question demande de connaitre ce sujet-la.

Ce compilateur s'utilise sous Linux, et est donc fourni avec un Makefile et quelques exemples a compiler.

Je debute depuis quelques mois sur Linux, et ma question se porte sur le contenu du Makefile : dedans sont utilisees les variables CXXFLAGS et LDFLAGS, mais celles-ci ne sont definies nulle part dans le Makefile. J'ai cru comprendre (a confirmer ?) que dans ce cas elles sont definies par defaut avec les variables d'environnement. Mais je ne les trouve pas quand j'ecrisen ligne de commande.


Voici les fichiers Makefile (il y en a plusieurs) :

Makefile "racine" situe au meme niveau que le compilateur "aspect" :

Ce n'est pas ce Makefile qui est concerne, mais je le mets quand meme dans le doute...

(Remarque : ACXX ou ag++ correspond au compilateur aspect combine au compilateur g++, et ACFLAGS aux options de ag++)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ACFLAGS ?= -v1 -k
ACXX    ?= $(PWD)/ag++
export ACXX
 
ACTESTS = $(filter-out Makefile%, $(filter-out CVS,$(notdir $(wildcard $(PWD)/examples/*))))
 
.PHONY: $(ACTESTS)
 
all: testrun
 
test: $(addsuffix .make, $(ACTESTS))
 
testrun: test $(addsuffix .run, $(ACTESTS))
 
clean: $(addsuffix .clean, $(ACTESTS))
 
%.make: %
    make -C examples/$<
 
%.run: %
    make -C examples/$< run
 
%.clean: %
    make -C examples/$< clean
Makefile "generique" (Makefile.generic) dans le dossier examples :

C'EST CE MAKEFILE QUI EST CONCERNE ! -> dans $(PROG), $(JUNK)/%.o, et $(JUNK)/%.d

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
CXX ?= g++
ACXX ?= ag++
 
PROG:=$(shell basename $$PWD)
 
SOURCES := $(wildcard *.cc)
 
JUNK    := Junk
OBJECTS := $(addprefix $(JUNK)/,$(patsubst %.cc,%.o,$(SOURCES)))
DEPS    := $(addprefix $(JUNK)/,$(patsubst %.cc,%.d,$(SOURCES)))
HEADERS := $(wildcard *.h)
ASPECTS := $(wildcard *.ah)
INCLUDE_LIST := $(patsubst %.ah,-include %.ah,$(ASPECTS))
 
all: $(PROG)
 
run: all
    ./$(PROG)
 
$(PROG): $(OBJECTS)
    @echo Linking $@
    @$(CXX) $(CXXFLAGS) -o $@ $(OBJECTS) $(LDFLAGS)
 
clean:
    @rm -rf *.o $(JUNK) $(PROG)
 
$(JUNK)/%.o : %.cc
    @echo Compiling $<
    @$(ACXX) $(CXXFLAGS) -x c++ -c $< -o $@
 
$(JUNK)/%.d : %.cc
    @mkdir -p $(JUNK)
    @$(CXX) $(CXXFLAGS) -x c++ -MM $(INCLUDE_LIST) $< | \
        sed -e "s/$*\.o/$(JUNK)\/& $(JUNK)\/$*.d/g" > $@
 
 
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
 
.PHONY: clean all
 
# don't remove any intermediate files
.SECONDARY:
Un dernier Makefile qui est dans chaque repertoire examples/example_i, dans lesquels il y a les fichiers sources de l'exemple i a compiler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
include ../Makefile.generic
Que peuvent donc contenir CXXFLAGS et LDFLAGS ???