Makefiles: получите .cpp из одного каталога и поместите скомпилированный .o в другой каталог - PullRequest
3 голосов
/ 16 ноября 2009

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

Мне нужен один 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 ../$@ 
    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, но никто не делает то, что я хочу делать.

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

1 Ответ

8 голосов
/ 16 ноября 2009

Существует несколько способов сделать это, но самый простой - запустить в 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 ../$@  

$(OBJECTS): Intermediate/%.o : Src/%.cpp
    $(CC) $(CFLAGS) -I $(GLES_INCLUDES) -c $&lt $(CLIBS) -o $@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...