2009-11-16 6 views
3

Я работаю над кросс-платформенным 2D-движком для мобильных устройств (Windows Mobile 6 и Android). Моя версия Windows в значительной степени готова, но мне все равно нужно убедиться, что на Android доступны те же функции.Makefiles: Получить .cpp из одного каталога и поместить скомпилированный .o в другой каталог

Что я хочу - это один Makefile в корне проекта и несколько Makefile для самого проекта и тестовых приложений.

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

Я основывая свои попытки на следующий Makefile:

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) 

Однако, я не очень хорошо с этими вещами. Я хочу, чтобы он взял файлы .cpp, которые находятся в папке src, скомпилируйте их в .o и поместите в папку intermediate и, наконец, скомпилируйте .o в скомпилированный exe и поместите его в папку bin.

мне удалось получить чистый работать так:

cd intermediate && rm -f *.o 

Однако, я не могу получить его, чтобы получить .cpp годов, собрать их и поместить их в папку intermediate.

Я просмотрел несколько других Makefiles, но никто не делает то, что я хочу сделать.

Любая помощь приветствуется.

+0

Пожалуйста, укажите «make» вместо «makefile». Дополнительная информация: http://meta.stackexchange.com/questions/24030/why-do-they-specify-makefile-tag-instead-of-make/26567#26567 –

+0

Ну, я * am * a noob относительно этих вещей , : P – knight666

ответ

8

Там больше, чем один из способов сделать это, но проще всего работать в TestOne, делая Intermediate/foo.o из Src/foo.cpp и test1 из Intermediate/foo.o, как это:

 
# 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

Спасибо! : D Это было именно то, что мне нужно. Мне нравится makefile (гораздо больше, чем vcproj от Visual Studio), но их можно так сложно настроить. :( – knight666

+0

Мне тоже нравятся, но у них есть некоторые серьезные недостатки и длинная кривая обучения ... и так как я на самом деле не проверял это, есть ошибка. Повесьте секунду ... – Beta

Смежные вопросы