ますは、私は、このようなのようなプロジェクトの構造を持っている
mcts/
src/
node_queue.c
node_queue.h
tests/
munit.c # testing frame work
munit.h
list_test.C# includes node_queue.h and munit.h
Makefile # Makefile in question
だからここに私の目的は、テストMCTS /テスト/ list_test.cをコンパイルすることです。私はこれをするためにいくつかの異なる戦略を読んだ。
:私はmcts/tests
で
make
を呼び出すときに、作業に約2時間で得ている最も近い
が
CC= gcc
SOURCE= $(wildcard ../src/*.c ./*.c)
OBJECTS= $(patsubst %.c, %.o, $(SOURCE))
INCLUDE= -I. -I../src/
CFLAGS= -std=c11 -g $(INCLUDE) -Werror -Wall
list_test: list_test.o munit.o ../src/node_queue.o
$(CC) $(CFLAGS) $(INCLUDE) -o [email protected] list_test.o munit.o ../src/node_queue.o
.c.o:
$(CC) $(CFLAGS) -c $< -o [email protected]
私はエラーが表示されます。ビットを読んだ後、私はこのへのMakefileから取ったいくつかのことを適応しました
list_test.o: In function `construct_test':
/home/----/mcts/tests/list_test.c:9: undefined reference to `construct'
collect2: error: ld returned 1 exit status
make: *** [Makefile:8: list_test] Error 1
ここで、構成はmcts/src/node_queue.h
で定義されます。 $(INCLUDE)
はヘッダーが含まれていることを確認してください。 これをどのように機能させることができますか?
多くの感謝!
最初に、 '.co'ルールは必要ありません。 - Makeが組み込まれています。 – Novelocrat
第2に、ベーキングパスではなく、オブジェクトを検索するディレクトリを指定するには' VPATH'を使用するのが望ましいでしょう依存関係とコマンドに変換します。私。 'list_test:list_test.o munit.o node_queue.o'と言って、そのルールは' -o $ @ $^'引数を持つコマンドを実行して、それが見つかった場合でもすべての依存関係を参照するようにします。 – Novelocrat
@Novelocrat私はVPATHを探していましたが、これは読んでいました(http://make.mad-scientist.net/papers/how-not-to-use-vpath/)、それはより良いと思われました他の方法を試みる。 –