【发布时间】:2015-05-27 23:27:48
【问题描述】:
我在尝试将 .o 文件放入单独的目录 (/build) 时遇到了一些问题。 实际上,我的源代码(在 /src 中)包含一些子目录,而我的 Makefile 仅创建包含在第一个“级别”中的 .cpp 的 .o。其他 .o 只是被忽略,因此无法创建目标。 在我的 /src 目录中,我有“三个级别”(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
【问题讨论】:
-
我假设你的意思是 make 不知道如何为
$(SRCDIR)下一级以上的源文件构建.o文件?如果是这种情况,那是因为$(SRCDIR)中的文件只有一个模式规则。 -
是的,这正是我的意思 :) 我必须为每个 src 级别编写一个规则吗?
-
最简单的,是的。可能有更复杂的解决方案(可能使用
vpath)可以让您避免这种情况,但它们是否值得是另一个问题。
标签: c++ object makefile directory