如何从自编译库中包含头文件?

时间:2013-10-29 06:29:40

标签: c++ c makefile include static-libraries

好的,所以我编写了一个简单的记录器,我写入了一个库,所以我可以将它包含在其他项目中。但是当我尝试包含该记录器的标题时,它无法编译。

这是我链接库的Makefile:

CC= clang++
PROG= ./bin/tetris
OBJS= ./src/main.o ./src/Tetris.o ./src/states/BaseState.o ./src/states/MenuState.o \
    ./src/states/GameState.o
LIBS= allegro-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_ttf-5.0 allegro_color-5.0
CXXFLAGS= -g -Wall -std=c++11
LDFLAGS= $(shell pkg-config --static --libs ${LIBS}) -I./src/util -L./src/util/ -lsimplog

all: $(PROG)

$(PROG): $(OBJS)
    mkdir -p ./bin/
    $(CC) -o $(PROG) $(CXXFLAGS) $(OBJS) $(LDFLAGS)
    rm -f $(OBJS)

clean:
    rm -f $(PROG) $(TEST_PROG) $(OBJS)

库为libsimplog.a,位于此项目的src目录中。我正在一个单独的项目文件夹中编译它,然后在这里复制。 simplog.h / simplog.c只存在于我最初编译此库的项目文件夹中。根据我的理解,我的编译标志中的-L ./src/ -lsimplog应该链接这个库。但是,我的#include "simplog.h"在编译时仍然失败:

fatal error: simplog.h: No such file or directory

我正在自己的项目文件夹中编译库,与此项目分开。 那个项目中存在simplog.h / simplog.c,而不是这个。 编译该库的其他项目的makefile如下:

CC = clang
CFLAGS = -Wall -c
LIB = libsimplog.a
SOURCE = simplog.c
OBJ = simplog.o

all:
    $(CC) $(CFLAGS) $(SOURCE)
    ar -cvq $(LIB) $(OBJ)

clean:
    rm -f $(LIB)

2 个答案:

答案 0 :(得分:2)

“ - L”指定链接器路径。

您需要告诉预处理器还有另一个包含目录-I./src /.

CXXFLAGS= -g -Wall -std=c++11 -I./src/ -L./src/ -lsimplog $(shell pkg-config --cflags ${LIBS})

答案 1 :(得分:0)

您是否尝试将I Flags包含在包含头文件中? 例如:

    -I/usr/include/

来自g ++的手册页

   -I dir           Add the directory dir to the list of directories to 
be searched for header files.  Directories named by -I are searched  
before the standard system include directories. 
If the directory dir is a standard system include directory, 
the option is ignored to ensure that the default search order for
system directories and the special treatment of system headers are no   
defeated .If dir begins with "=", then the "=" will be replaced by the
sysroot prefix; see --sysroot and -isysroot.