さて、ライブラリに書き込んだ単純なロガーをコンパイルして、他のプロジェクトに含めることができるようにしました。しかし、そのロガーのヘッダーをインクルードしようとすると、コンパイルに失敗します。
ライブラリをリンクする私の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 は、このプロジェクトではなく、そのプロジェクトに存在します。このライブラリをコンパイルする別のプロジェクトのメイクファイルは次のとおりです。
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)