2009-11-16 2 views
3

Je travaille sur un moteur 2D multiplate-forme pour les appareils mobiles (Windows Mobile 6 et Android). Ma version Windows est à peu près prête, mais je dois quand même m'assurer que la même fonctionnalité est disponible sur Android. Ce que je veux est un Makefile à la racine du projet et plusieurs Makefile pour le projet lui-même et les applications de test.Makefiles: Récupère .cpp d'un répertoire et place le .o compilé dans un autre répertoire

Makefile 
---Engine 
------Makefile 
------src 
------bin 
------intermediate 
---Tests 
------TestOne 
---------Makefile 
---------src 
---------bin 
---------intermediate 
------TestTwo 
---------Makefile 
---------src 
---------bin 
---------intermediate 

Je fonde mes tentatives sur la Makefile suivante:

include ../makeinclude 

PROGS = test1 
SOURCES = $(wildcard *.cpp) 

# first compile main.o and start.o, then compile the rest 
OBJECTS = main.o start.o $(SOURCES:.cpp=.o) 

all: $(PROGS) 

clean: 
    rm -f *.o src 

test1: $(OBJECTS) 
    $(LD) --entry=_start --dynamic-linker system/bin/linker -nostdlib -rpath system/lib -rpath $(LIBS) -L $(LIBS) -lm -lc -lui -lGLESv1_CM $^ -o ../[email protected] 
    acpy ../$(PROGS) 
.cpp.o: 
    $(CC) $(CFLAGS) -I $(GLES_INCLUDES) -c $*.cpp $(CLIBS) 

Cependant, je ne suis pas très bon avec ces choses. Ce que je veux, c'est qu'il prenne les .cpp qui se trouvent dans le dossier src, les compile en .o et les place dans le dossier intermediate et, enfin, compile les .o à l'exe compilé et le place dans le dossier bin.

J'ai réussi à se désintoxiquer à travailler comme ça:

cd intermediate && rm -f *.o 

Cependant, je ne peux pas l'obtenir pour récupérer de la Cpp, les compiler et les mettre dans le dossier intermediate.

J'ai regardé plusieurs autres Makefiles, mais aucun ne fait les choses que je veux faire.

Toute aide est appréciée.

+0

Veuillez spécifier "make" au lieu de "makefile". Plus d'infos: http://meta.stackexchange.com/questions/24030/why-do-they-specify-makefile-tag-instead-of-make/26567#26567 –

+0

Eh bien, je * suis * un noob concernant ces choses . : P – knight666

Répondre

8

Il y a plus d'une façon de le faire, mais le plus simple à exécuter dans testone, faisant intermédiaire/foo.o de Src/foo.cpp et test1 sur Intermédiaire/foo.o, comme ceci:

 
# This makefile resides in TestOne, and should be run from there. 

include makeinclude # Adjust the path to makeinclude, if need be. 

PROG = bin/test1 
SOURCES = $(wildcard Src/*.cpp) 

# Since main.cpp and start.cpp should be in Src/ with the rest of 
# the source code, there's no need to single them out 
OBJECTS = $(patsubst Src/%.cpp,Intermediate/%.o,$(SOURCES)) 

all: $(PROG) 

clean: 
    rm -f Intermediate/*.o bin/* 

$(PROG): $(OBJECTS) 
    $(LD) $(BLAH_BLAH_BLAH) $^ -o ../[email protected] 

$(OBJECTS): Intermediate/%.o : Src/%.cpp 
    $(CC) $(CFLAGS) -I $(GLES_INCLUDES) -c $< $(CLIBS) -o [email protected] 
+0

Merci! : D C'était exactement ce dont j'avais besoin. J'adore makefile (beaucoup plus que vcproj de Visual Studio), mais ils peuvent être si difficiles à configurer. :( – knight666

+0

Je les aime aussi, mais ils ont de sérieux défauts et une longue courbe d'apprentissage ... et comme je n'ai pas vraiment testé ça, il y a un bug ... – Beta

Questions connexes