我有一个具有以下目录结构的小项目:
src/
game/
some srcs...
platform/
sdl/
main.c
Makefile
engine.c
engine.h
Makefile
我打算在平台内部拥有多个目录,其中不同的平台我的目标是我的小项目。根级Makefile只是一个帮手:它允许我从根文件夹中运行诸如" make platform-name"," make platform-name-clean"等等
这是我在平台文件夹中的实际Makefile:
TARGET = sdl-game
SRC_FOLDER = ../..
CC = gcc
CFLAGS = -g -Wall -DPLAT_SDL
LDFLAGS = -lm
OBJECTS = main.o \
$(SRC_FOLDER)/engine.o \
$(SRC_FOLDER)/game/game.o \
$(SRC_FOLDER)/game/components.o
$(TARGET): $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS) $(CFLAGS) $(LDFLAGS)
clean:
rm -rf $(SRC_FOLDER)/*.o
rm -rf $(SRC_FOLDER)/game/*.o
rm -rf $(SRC_FOLDER)/platform/sdl/*.o
rm -rf $(SRC_FOLDER)/platform/sdl/sdl
问题是:我无法使用我的根级Makefile从platform / sdl文件夹外部运行它:
null:
make -C src/platform/sdl -f Makefile
有什么想法吗?另外,我如何将这些.o对象移动到" build / platform-name"文件夹?
答案 0 :(得分:0)
永远不要在其他目录中调用Makefile;相反,在每个子目录中放置一个Makefile,并在项目的根目录中添加一个主Makefile,如下所示:
SHELL = /bin/bash
DIRS = subdir1 subdir2 ...
depend all clean ::
@ for d in $(DIRS) ; do \
(cd $$d && make $@) ;\
done
但我不确定回答你的问题?
答案 1 :(得分:0)
如果我理解你的评论(“构建,在root上”),请正确地做到这一点:
...
OBJ_FOLDER = ../../../build
...
OBJECTS = $(OBJ_FOLDER)/main.o \
$(OBJ_FOLDER)/engine.o \
$(OBJ_FOLDER)/game.o \
$(OBJ_FOLDER)/components.o
$(TARGET): $(OBJECTS)
$(CC) -o $(TARGET) $(OBJECTS) $(CFLAGS) $(LDFLAGS)
vpath %.c $(SRC_FOLDER) $(SRC_FOLDER)/game
$(OBJECTS): $(OBJ_FOLDER/%.o : %.c
$(CC) -o $@ $< $(CFLAGS)
clean:
rm -rf $(OBJ_FOLDER)/*.o
rm -rf sdl