C++生成文件.o在不同的子目录中
C++ Makefile. .o in different subdirectories
我在尝试将.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
你可以试试这个:
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
相关文章:
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 从所有列出的文件和子目录中更改目录
- 获取每个目录或子目录中第一个文件的路径
- Qt创建者:加载位于子目录中的项目文件
- 如何在子目录中创建文本文件?
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- 生成文件:子目录的模式规则
- CMake 子目录 - 编译测试子项目时,包含的头文件没有此类文件或目录
- 节点构建失败。无法在包含目录的子目录中找到库头文件
- 这是在生成文件中包含子目录的正确方法吗?
- 使用C 列出目录中的文件,而不是递归,只有文件和无子目录
- CMAKE:将静态库从子目录链接到另一个子目录中的可执行文件
- 在目录和子目录C 中计数具有特定扩展名的文件
- CMake 从子目录和父目录链接文件
- 创建目录中所有.cpp文件和 android.mk 子目录中的FILE_LIST
- 一种使用 boost 和 c++ 列出目录和子目录中所有文件的方法
- 如何在子目录中生成包含源的生成文件
- 用于列出子目录中所有文件的递归功能
- 扫描目录和子目录中的.txt文件
- 如何在cllion中编译子目录文件