无法让我的makefile工作

时间:2016-03-22 07:09:45

标签: c++ makefile

项目的文件夹结构:

|--particle-system
|   |-- bin
|   |   |-- .o files
|   |-- docs
|   |   |-- design.md
|   |   `-- TO_DO
|   |-- Makefile
|   |-- src
|   |   |-- .cpp files + .h files
|   `-- test

我需要将生成的所有.o文件放入bin文件夹中。清理还应删除所有.o文件和/ bin文件夹。

我的makefile:

# particle-system Makefile

EXE = particlesystem
OBJ_DIR = bin

CFLAGS = -g
CXXFLAGS = -Wall -Wextra -g -std=c++0x
LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer -lSDL2_gfx -lm


 # c++ source files of the project
CXXFILES = $(shell find src -maxdepth 1 -type f -name '*.cpp')
CXXOBJ = $(CXXFILES:.cpp=.o)

ifdef V
MUTE =
VTAG = -v
else
MUTE = @
endif

all: $(EXE)
    # build successful

$(EXE): $(CXXOBJ)
    $(MUTE)$(CXX) $(CXXOBJ) -o $(EXE) $(LDFLAGS)

$(OBJ_DIR)/%.o: src/%.cpp
    $(MUTE)$(CXX) $(CXXFLAGS) $(INCLUDE) $< -c -o $@


$(OBJ_DIR)/%.o: src/%.c
    $(MUTE)$(CC) $(CFLAGS) $(INCLUDE) $< -c -o $@

run: all
    $(MUTE)./$(EXE)

clean:
    # Cleaning...
    -$(MUTE)rm -f $(EXE) $(OBJECTS)

我不知道为什么这个makefile不起作用。请告诉我们这里的错误。

1 个答案:

答案 0 :(得分:0)

此行将导致在与源文件相同的目录中创建.o个文件:

CXXOBJ = $(CXXFILES:.cpp=.o)

因此,这些行无效,因为.o

中没有$(OBJ_DIR):个文件
$(OBJ_DIR)/%.o: src/%.cpp
    $(MUTE)$(CXX) $(CXXFLAGS) $(INCLUDE) $< -c -o $@

$(OBJ_DIR)/%.o: src/%.c
    $(MUTE)$(CC) $(CFLAGS) $(INCLUDE) $< -c -o $@

此外,$(INCLUDE)未定义。

在此行中,未定义$(OBJECTS)

-$(MUTE)rm -f $(EXE) $(OBJECTS)