简体   繁体   English

C ++ Makefile。 .o在不同的子目录中

[英]C++ Makefile. .o in different subdirectories

I have some problems trying to put .o files into a separate directory (/build). 尝试将.o文件放入单独的目录(/ build)时遇到一些问题。 Actually, my sources (in /src) contain some subdirectories, and my Makefile only create the .o of the .cpp contained at the first "level". 实际上,我的源代码(在/ src中)包含一些子目录,而我的Makefile仅创建第一个“级别”中包含的.cpp的.o。 The other .o are just ignored, so, the target cannot be created. 其他.o只会被忽略,因此无法创建目标。 In my /src directory, I have "three levels" (src/first/second/). 在我的/ src目录中,我有“三个级别”(src / first / second /)。 Here's the code of the Makefile : 这是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

You can try this: 您可以尝试以下方法:

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  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM