0
ビルドしている小さなライブラリについては、以下のような単純な構造になっています。私は私が構築することができますmake build_test
は、それ自身のバイナリ make:テストディレクトリにある各ファイルのテストバイナリを作成します。
にtest_
が付い./test
下にあるすべてのソースファイルを構築したい、私はmake build
が./source
libproj.a
)を構築したい
- ライブラリ
libproj.a
でも問題はありませんが、テストの構築方法を理解することはできません。/cygdrive/d/Source/proj/build/obj/test_proj.o:test_proj.c:(.text+0x15): undefined reference to 'test'
をビルドしようとすると、現在次のリンカーエラーが表示されます。$(CC) $(LDFLAGS) -L $(DIR_BLD_LIB) -l $(PROJECT) $< -o [email protected]
間違っている:
ディレクトリ構造
+---build | +---lib | +---obj | \---test +---include | \---proj +---source \---test
Makefileの
PROJECT = proj LIBNAME = lib$(PROJECT).a CFLAGS = -Wall -Wextra -O0 DIR_ROOT = $(abspath .) DIR_SRC_LIB = $(DIR_ROOT)/source DIR_SRC_TEST = $(DIR_ROOT)/test DIR_BLD_OBJ = $(DIR_ROOT)/build/obj DIR_BLD_LIB = $(DIR_ROOT)/build/lib DIR_BLD_TEST = $(DIR_ROOT)/build/test LST_OBJ_LIB = $(patsubst $(DIR_SRC_LIB)/%.c, $(DIR_BLD_OBJ)/%.o, $(wildcard $(DIR_SRC_LIB)/*.c)) LST_OBJ_TEST = $(patsubst $(DIR_SRC_TEST)/%.c, $(DIR_BLD_OBJ)/%.o, $(wildcard $(DIR_SRC_TEST)/*.c)) LST_BIN_TEST = $(patsubst $(DIR_SRC_TEST)/%.c, $(DIR_BLD_TEST)/%, $(wildcard $(DIR_SRC_TEST)/test_*.c)) INCLUDES = -I $(DIR_ROOT)/include clean: $(RM) $(LST_OBJ_LIB) $(RM) $(LST_OBJ_TEST) build: $(info build) build-test: $(LST_BIN_TEST) $(info build-test) run-test: $(info run-test) install: $(info install) $(LIBNAME): $(LST_OBJ_LIB) $(AR) rvs $(DIR_BLD_LIB)/[email protected] $^ $(DIR_BLD_OBJ)/%.o: $(DIR_SRC_LIB)/%.c $(CC) $(CFLAGS) $(INCLUDES) -c $< -o [email protected] $(DIR_BLD_TEST)/%: $(DIR_BLD_OBJ)/%.o $(LIBNAME) $(CC) $(LDFLAGS) -L $(DIR_BLD_LIB) -l $(PROJECT) $< -o [email protected] $(DIR_BLD_OBJ)/%.o: $(DIR_SRC_TEST)/%.c $(CC) $(CFLAGS) $(INCLUDES) -c $< -o [email protected]
これらのテストファイルをどのようなバイナリでビルドしますか?独立した実行ファイルに?または、何かにリンクされているオブジェクトファイル? –
@GeorgP。独立した実行可能ファイル、はい。たとえば、test_libproj、test_mytestという名前が付いています(対応するソースファイル名の場合)。 –
@GeorgP。追加情報の追加 –