[linux] Re: Generieke regel voor executables in make

Marcel Nijenhof marceln op xs4all.nl
Ma Aug 23 20:47:12 CEST 2010


On Mon, 2010-08-23 at 20:05 +0200, Cecil Westerhof wrote:

> Ik ben aan het stoeien met make. Ik heb op het ogenblik de volgende
> Makefile:
>     HELLO_WORLD_EXEC	= helloWorld
>     HELLO_WORLD_OBJECTS = helloWorld.o
> 
>     CXX             = g++

Dit is een default onder linux!

>     CXXFLAGS        = -Wall -Wextra

Voor deze flaggen weet ik inderdaad niet wat de defaults zijn.

> ...

>     $(HELLO_WORLD_EXEC): $(HELLO_WORLD_OBJECTS)
>         $(CXX) $(LDFLAGS) -o $(HELLO_WORLD_EXEC) $(HELLO_WORLD_OBJECTS)
>
>     %.o: %.cpp $(GENERAL_HEADERS)
>         $(CXX) $(CXXFLAGS) -c $< -o $@
> 

Dit zijn allemaal defaults!

Voldoende is:
  $(HELLO_WORLD_EXEC): $(HELLO_WORLD_OBJECTS)

Make weet hoe hij het objecten een executable moet bouwen dus de rule
hoef je niet te specificeren. Ook weet Make hoe je uit de source files
objecten kunt bouwen. Als een target (het programma "HELLO_WORLD_EXEC")
dependencies heeft na de objecten "HELLO_WORLD_OBJECTS" en deze objecten
bestaan niet dan gaat make zelf op zoek na sources om het te bouwen.

Note:
  Je mist op deze manier wel de dependencies van de header files.
  Maar daar zijn oplossingen voor.

> Op dit moment is het een beetje overkill, maar ik wil het zo generiek
> mogelijk maken. In de toekomst wil ik met één Makefile meerdere
> programma's maken.

Je bereikt al een hoop door gewoon de default regels te gebruiken want
die zijn generiek.

-- 
marceln




More information about the Linux mailing list