使用g ++

时间:2017-03-14 21:24:58

标签: makefile g++ static-libraries

我想使用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文件。我找不到这个缺失:

  1. 我找到了依赖项
  2. 我从.cpp文件中编译.o目标文件
  3. ar所有内容都放在.a文件中。
  4. 缺少什么?另外,如果您对我的makefile有任何评论,请不要犹豫,因为这是我的第一个。

    此致

1 个答案:

答案 0 :(得分:1)

您应该指定先决条件的位置。这可以通过添加以下行来完成:

VPATH = source

此外,在规则.cpp.o中,未定义变量CPCC(可能应该是CXX)

此外,OPT_FLAGS应为-O0