使用 g++ 为 c++ 静态库创建 makefile
Creating makefile for c++ static library with g++
我想用GNU make编译一个静态库。在我的光盘上,项目是这样排列的:
.
├── makefile
├── publicAPI
│ └── Some headers (.h)
└── source
├── All .cpp files
└── Some headers (.h)
到目前为止,我已经编写了以下 makefile:
CPPC = gcc
STANDARD_FLAGS = -std=c++0x
WARN_AS_ERRORS_FLAGS = -pedantic-errors\
-Wall\
-Wextra\
-Werror\
-Wconversion
DEBUG_FLAGS = -g3
OPT_FLAGS = -0O
NO_LINKER_FLAGS = -c
CPPFLAGS = $(OPT_FLAGS) $(DEBUG_FLAGS) $(NO_LINKER_FLAGS) $(STANDARD_FLAGS) \
$(WARN_AS_ERRORS_FLAGS)
# Source files, headers, etc.:
ROOT = $(CURDIR)
INCLUDES = -I$(ROOT)source -I$(ROOT)publicAPI
SRCS = ./source/AsciiColorCode.cpp\
./source/Color.cpp
OBJS = AsciiColorCode.o\
Color.o
LIBS =
MAIN = libcXbase.a # static library
all: $(MAIN)
@echo $(MAIN) has been compiled!
$(MAIN): $(OBJS)
ar -r $(MAIN) $(OBJS) $(LIBS)
.cpp.o:
$(CPPC) $(CPPFLAGS) $(INCLUDES) -c $< -o $@
depend: $(SRCS)
makedepend $(INCLUDES) $^
当我 运行 make all
时,我得到以下错误: make: *** No rule to make target 'AsciiColorCode.o', needed by 'libcXbase.a'. Stop.
这表明 AsciiColorCode.o 文件尚未创建。我找不到其中缺少的内容:
- 我找到了依赖关系
- 我从 .cpp 文件编译 .o 目标文件
- 我
ar
把所有东西都放到一个.a文件里。
少了什么?另外,如果您对我的 makefile 有任何意见,请不要犹豫,因为这是我的第一个。
此致
您应该指定先决条件在哪里。这可以通过添加此行来完成:
VPATH = source
另外,在规则.cpp.o
中,变量CPCC
没有定义(应该是CXX)
此外,OPT_FLAGS
应该是 -O0
我想用GNU make编译一个静态库。在我的光盘上,项目是这样排列的:
.
├── makefile
├── publicAPI
│ └── Some headers (.h)
└── source
├── All .cpp files
└── Some headers (.h)
到目前为止,我已经编写了以下 makefile:
CPPC = gcc
STANDARD_FLAGS = -std=c++0x
WARN_AS_ERRORS_FLAGS = -pedantic-errors\
-Wall\
-Wextra\
-Werror\
-Wconversion
DEBUG_FLAGS = -g3
OPT_FLAGS = -0O
NO_LINKER_FLAGS = -c
CPPFLAGS = $(OPT_FLAGS) $(DEBUG_FLAGS) $(NO_LINKER_FLAGS) $(STANDARD_FLAGS) \
$(WARN_AS_ERRORS_FLAGS)
# Source files, headers, etc.:
ROOT = $(CURDIR)
INCLUDES = -I$(ROOT)source -I$(ROOT)publicAPI
SRCS = ./source/AsciiColorCode.cpp\
./source/Color.cpp
OBJS = AsciiColorCode.o\
Color.o
LIBS =
MAIN = libcXbase.a # static library
all: $(MAIN)
@echo $(MAIN) has been compiled!
$(MAIN): $(OBJS)
ar -r $(MAIN) $(OBJS) $(LIBS)
.cpp.o:
$(CPPC) $(CPPFLAGS) $(INCLUDES) -c $< -o $@
depend: $(SRCS)
makedepend $(INCLUDES) $^
当我 运行 make all
时,我得到以下错误: make: *** No rule to make target 'AsciiColorCode.o', needed by 'libcXbase.a'. Stop.
这表明 AsciiColorCode.o 文件尚未创建。我找不到其中缺少的内容:
- 我找到了依赖关系
- 我从 .cpp 文件编译 .o 目标文件
- 我
ar
把所有东西都放到一个.a文件里。
少了什么?另外,如果您对我的 makefile 有任何意见,请不要犹豫,因为这是我的第一个。
此致
您应该指定先决条件在哪里。这可以通过添加此行来完成:
VPATH = source
另外,在规则.cpp.o
中,变量CPCC
没有定义(应该是CXX)
此外,OPT_FLAGS
应该是 -O0