C++ 生成文件。 .o 在不同的子目录中
C++ Makefile. .o in different subdirectories
我在尝试将 .o 文件放入单独的目录 (/build) 时遇到了一些问题。
实际上,我的源代码(在 /src 中)包含一些子目录,而我的 Makefile 只创建包含在第一个 "level" 中的 .cpp 的 .o。其他 .o 被忽略,因此无法创建目标。
在我的 /src 目录中,我有 "three levels" (src/first/second/)。
这是 Makefile 的代码:
CC=g++
CFLAGS=-W -Wall -ansi -pedantic -s -O3 -Os -std=c++11 -fpermissive
LDFLAGS= -lboost_system -lboost_regex
SRCDIR=src
HEADDIR=include
LIBDIR=build
BINDIR=bin
BIN=LTN
SRC = $(wildcard src/*.cpp src/*/*.cpp src/*/*/*.cpp)
OBJ = $(patsubst %.cpp,$(LIBDIR)/%.o,$(SRC))
all: $(BIN)
LTN: $(OBJ)
$(CC) -o $(BINDIR)/$@ $^ $(LDFLAGS)
$(LIBDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.cpp $(HEADDIR)/%.h
$(CC) -o $@ -c $< $(CFLAGS)
.PHONY = clean
你可以试试这个:
CC=g++
CFLAGS=-W -Wall -ansi -pedantic -s -O3 -Os -std=c++11 -fpermissive
LDFLAGS= -lboost_system -lboost_regex
SRCDIR=src
HEADDIR=include
LIBDIR=build
BINDIR=bin
BIN=LTN
SRC=$(shell find . -name '*.cpp')
TMP=$(subst $(SRCDIR),$(LIBDIR), $(SRC))
OBJ=$(patsubst %.cpp,%.o,$(TMP))
all: $(BIN)
LTN: $(OBJ)
@[ ! -d $(BINDIR) ] & mkdir -p $(BINDIR)
$(CC) -o $(BINDIR)/$@ $^ $(LDFLAGS)
$(LIBDIR)/%.o: $(SRCDIR)/%.cpp
@[ ! -d $(dir $@) ] & mkdir -p $(dir $@)
$(CC) -o $@ -c $< $(CFLAGS)
.PHONY = clean
我在尝试将 .o 文件放入单独的目录 (/build) 时遇到了一些问题。 实际上,我的源代码(在 /src 中)包含一些子目录,而我的 Makefile 只创建包含在第一个 "level" 中的 .cpp 的 .o。其他 .o 被忽略,因此无法创建目标。 在我的 /src 目录中,我有 "three levels" (src/first/second/)。 这是 Makefile 的代码:
CC=g++
CFLAGS=-W -Wall -ansi -pedantic -s -O3 -Os -std=c++11 -fpermissive
LDFLAGS= -lboost_system -lboost_regex
SRCDIR=src
HEADDIR=include
LIBDIR=build
BINDIR=bin
BIN=LTN
SRC = $(wildcard src/*.cpp src/*/*.cpp src/*/*/*.cpp)
OBJ = $(patsubst %.cpp,$(LIBDIR)/%.o,$(SRC))
all: $(BIN)
LTN: $(OBJ)
$(CC) -o $(BINDIR)/$@ $^ $(LDFLAGS)
$(LIBDIR)/$(SRCDIR)/%.o: $(SRCDIR)/%.cpp $(HEADDIR)/%.h
$(CC) -o $@ -c $< $(CFLAGS)
.PHONY = clean
你可以试试这个:
CC=g++
CFLAGS=-W -Wall -ansi -pedantic -s -O3 -Os -std=c++11 -fpermissive
LDFLAGS= -lboost_system -lboost_regex
SRCDIR=src
HEADDIR=include
LIBDIR=build
BINDIR=bin
BIN=LTN
SRC=$(shell find . -name '*.cpp')
TMP=$(subst $(SRCDIR),$(LIBDIR), $(SRC))
OBJ=$(patsubst %.cpp,%.o,$(TMP))
all: $(BIN)
LTN: $(OBJ)
@[ ! -d $(BINDIR) ] & mkdir -p $(BINDIR)
$(CC) -o $(BINDIR)/$@ $^ $(LDFLAGS)
$(LIBDIR)/%.o: $(SRCDIR)/%.cpp
@[ ! -d $(dir $@) ] & mkdir -p $(dir $@)
$(CC) -o $@ -c $< $(CFLAGS)
.PHONY = clean