如何将.o文件放到不同的文件夹中,我该如何改进?

时间:2013-11-15 15:13:58

标签: makefile

我以前从未真正写过任何makefile,而且我对它的语法知之甚少。 我想把.o文件放到单独的文件夹中,例如obj /。但我有点失去了应该如何做,因为似乎有很多不同的方法来编写makefile。

这就是我目前的情况,我想改进它。

PROGRAM=Project

CC=g++

CFLAGS=-c -g -std=c++0x -Wall -Wextra -pedantic -I $(SFML)/include -I src

LDFLAGS=-lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio -L $(SFML)/lib -Wl,-rpath=$(SFML)/lib -Wl,-rpath-link=$(SFML)/lib

SOURCES=$(wildcard src/*.cpp)
OBJECTS=$(SOURCES:.cpp=.o)

EXECUTABLE=bin/project

all: build $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(OBJECTS) $(LDFLAGS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

build:
    @mkdir -p bin

clean:
    rm -rf $(EXECUTABLE) $(OBJECTS)

我尝试了一些不同的方法,但尚未弄清楚如何将.o文件放在自己的文件夹中。

1 个答案:

答案 0 :(得分:1)

用以下内容替换您的OBJECTS行:

OBJECTS=$(patsubst src/%.cpp,obj/%.o,$(SOURCES))

删除.ccp.o规则并将其替换为:

obj/%.o: src/%.cpp
        $(CC) $(CFLAGS) $< -o $@

您可以从$(SOURCES)目标的先决条件列表中删除all,除非您希望make尝试以某种方式创建这些文件。