|
| Simpelt spørgsmål om make og makefiler Fra : Klaus Petersen |
Dato : 23-03-04 19:44 |
|
Hej.
Jeg har lavet en Makefile fil til mit c/c++ projekt og den virker sådan set
også fint.
Men jeg undrer mig over, at når alle objekt filer er up-to-date - og dermed
også den eksekverbare fil - hvorfor udfører make så alligevel altid en
linking af objektfilerne?
Skal det være sådan eller er der en fejl i min Makefile?
Klaus.
| |
Mogens Hansen (23-03-2004)
| Kommentar Fra : Mogens Hansen |
Dato : 23-03-04 20:55 |
|
Klaus Petersen wrote:
[8<8<8<]
> Skal det være sådan eller er der en fejl i min Makefile?
Det lyder som en fejl i din makefil
Venlig hilsen
Mogens Hansen
| |
Bertel Brander (23-03-2004)
| Kommentar Fra : Bertel Brander |
Dato : 23-03-04 23:20 |
|
Klaus Petersen wrote:
> Hej.
>
> Skal det være sådan eller er der en fejl i min Makefile?
>
Som Mogens skriver så er det sansynligvis en fejl i din makefile,
hvis vi må se den kan der være vi kan hjælpe. Husk lige at gøre
opmærksom på hvilken make du bruger (Borland, Microsoft, gcc, ...).
/b
| |
Klaus Petersen (24-03-2004)
| Kommentar Fra : Klaus Petersen |
Dato : 24-03-04 21:17 |
|
> Som Mogens skriver så er det sansynligvis en fejl i din makefile,
> hvis vi må se den kan der være vi kan hjælpe. Husk lige at gøre
> opmærksom på hvilken make du bruger (Borland, Microsoft, gcc, ...).
Jeg bruger gcc make.
Her er den:
CXX = g++
GCC = gcc
CXXFLAGS = -Wall -g -s
LIBS =
# Output eksekverbar fil
bwhealth_output = bwhealth
# Objekt filer
bwhealth_exe_objs = main.o bwhealth.o sampler.o samplecollection.o
# main target
bwhealth_exe: $(bwhealth_exe_objs)
$(CXX) $(CXXFLAGS) -o $(bwhealth_output) $(LIBS) $(bwhealth_exe_objs)
# clean
clean:
rm -f *.o $(bwhealth_output)
#-------------------#
# Targets - Objects #
#-------------------#
main.o: main.cpp
bwhealth.o: bwhealth.cpp sampler.o
sampler.o: sampler.cpp samplecollection.o
samplecollection.o: samplecollection.cpp
| |
Bertel Brander (24-03-2004)
| Kommentar Fra : Bertel Brander |
Dato : 24-03-04 22:46 |
|
Klaus Petersen wrote:
> bwhealth_exe: $(bwhealth_exe_objs)
> $(CXX) $(CXXFLAGS) -o $(bwhealth_output) $(LIBS) $(bwhealth_exe_objs)
>
Så vidt jeg kan se er fejlen at kommandoen ikke lave target, output
fra linkeren er ikke bwhealth_exe men bwhealth, derfor vil den blive
ved med at forsøge at lave bwhealth_exe.
Du kan lave det om til:
$(bwhealth_output): $(bwhealth_exe_objs)
$(CXX) $(CXXFLAGS) -o $(bwhealth_output) $(LIBS) $(bwhealth_exe_objs)
Du kan evt. prøve at køre make med -d switchen, så fortæller den hvad
den laver og hvorfor (pipe det evt til en fil, der kommer MEGET
information), prøv at lede efter "must remake" og/eller newer i output
fra make.
/b
| |
Klaus Petersen (28-03-2004)
| Kommentar Fra : Klaus Petersen |
Dato : 28-03-04 15:24 |
|
Først og fremmest - tak for dit svar.
Dit ændringsforslag løste problemet.
> Så vidt jeg kan se er fejlen at kommandoen ikke lave target, output
> fra linkeren er ikke bwhealth_exe men bwhealth, derfor vil den blive
> ved med at forsøge at lave bwhealth_exe.
Med andre ord ... den vil skabe mit target bwhealth_exe fordi filen
bwhealth_exe ikke findes ...
Dvs. navnet på et target henviser til en fil.
Er det korrekt forstået?
| |
Anders J. Munch (24-03-2004)
| Kommentar Fra : Anders J. Munch |
Dato : 24-03-04 16:12 |
|
"Klaus Petersen" <spectual2@getTOnet.dk> wrote:
> Hej.
>
> Jeg har lavet en Makefile fil til mit c/c++ projekt og den virker sådan set
> også fint.
>
> Men jeg undrer mig over, at når alle objekt filer er up-to-date - og dermed
> også den eksekverbare fil - hvorfor udfører make så alligevel altid en
> linking af objektfilerne?
>
> Skal det være sådan eller er der en fejl i min Makefile?
Check om der er en fremdateret objektfil.
- Anders
| |
|
|