好的,所以我编写了一个简单的记录器,我写入了一个库,所以我可以将它包含在其他项目中。但是当我尝试包含该记录器的标题时,它无法编译。
这是我链接库的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)
答案 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.