我以前从未真正写过任何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文件放在自己的文件夹中。
答案 0 :(得分:1)
用以下内容替换您的OBJECTS行:
OBJECTS=$(patsubst src/%.cpp,obj/%.o,$(SOURCES))
删除.ccp.o规则并将其替换为:
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) $< -o $@
您可以从$(SOURCES)
目标的先决条件列表中删除all
,除非您希望make尝试以某种方式创建这些文件。