在make上添加路径

Wil*_*3uk 12 makefile g++

在我的makefile中,我有一个对象变量.我需要在每个.o文件前加上obj /.我该怎么做?

CC=g++
CFLAGS=-C -Wall
LDFLAGS=-lsqlite3 -lpthread -ldl
SOURCES=main.cpp Database.cpp actionInit.cpp TileSet.cpp Player.cpp
OBJECTS=$(SOURCES:.cpp=.o)

EXECUTABLE=mahjong-counter

all: bin $(OBJECTS) $(EXECUTABLE)

bin:
    mkdir -p bin

%.o: %.cpp
    $(CC) $(LDFLAGS) $< -c -o $@

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

clean:
    rm $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)

Sag*_*gar 17

你想要CXX,而不是CC.CC适用于C编译器,而不是C++编译器在任何情况下,我认为以下内容应该有效:

CXX=g++
CXXFLAGS=-C -Wall
LDFLAGS=-lsqlite3 -lpthread -ldl

OBJ_DIR = obj
BIN_DIR = bin
EXECUTABLE=mahjong-counter

SOURCES= main.cpp Database.cpp actionInit.cpp TileSet.cpp Player.cpp
OBJECTS= $(SOURCES:%.cpp=$(OBJ_DIR)/%.o)

all: dirs $(OBJECTS) $(EXECUTABLE)

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

$(OBJ_DIR)/%.o: %.cpp
        $(CXX) $(CXXFLAGS) $< -o $@

dirs:
    mkdir -p $(BIN_DIR)
    mkdir -p $(OBJ_DIR)

.PHONY: dirs all
Run Code Online (Sandbox Code Playgroud)

  • `CC`用于C编译器,无论它的'gcc`是否无关紧要. (2认同)

P S*_*ved 10

您可以使用分配时使用的更具表现力的替换版本 OBJECTS

OBJECTS=$(SOURCES:%.cpp=obj/%.o)
Run Code Online (Sandbox Code Playgroud)

或使用标准的文本转换功能

OBJECTS=$(addprefix obj/,$(SOURCES:.cpp=.o))
Run Code Online (Sandbox Code Playgroud)

  • 有人还使用非GNU制作吗? (6认同)
  • @Maxim:非GNU系统上的人(BSD,Solaris,IRIX,AIX,...)? (4认同)