C ++ Makefile. .o在不同的子目录中 [英] C++ Makefile. .o in different subdirectories

查看:109
本文介绍了C ++ Makefile. .o在不同的子目录中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试将.o文件放入单独的目录(/build)时遇到一些问题. 实际上,我的源代码(在/src中)包含一些子目录,而我的Makefile仅创建第一个级别"中包含的.cpp的.o.其他.o只是被忽略,因此无法创建目标. 在我的/src目录中,我有三个级别"(src/first/second/). 这是Makefile的代码:

I have some problems trying to put .o files into a separate directory (/build). Actually, my sources (in /src) contain some subdirectories, and my Makefile only create the .o of the .cpp contained at the first "level". The other .o are just ignored, so, the target cannot be created. In my /src directory, I have "three levels" (src/first/second/). Here's the code of the 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  

这篇关于C ++ Makefile. .o在不同的子目录中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆