2016-11-18 21 views
-2

私はすでに存在するCコードを作成していますが、今度はC言語でsqliteを使ってデータベースを作成しました。しかし、今私はそれのためのmakefileを作成する必要があります。私はプログラムを使用してコンパイルしましたメイクファイルでCライブラリをリンクする方法

gcc cliDemo.c -l sqlite3 

私はメイクファイルを使用しているので、私はこれをメイクファイルに入れる必要があります。私はいくつかのことを試みたが、何も働かなかった。

EXEC  = telescope 
CC = gcc 
CFLAGS = -Wall -fno-strict-aliasing -g -I/usr/include/libxml2 -DHAVE_CONFIG_H 
LDFLAGS = -lxml2 -lpthread -lm -lz 


AR = @[email protected] 
ARFLAGS = @[email protected] 
RANLIB = @[email protected] 

INSTALL_MODE= -m 0755 

# Include some boilerplate Gnu makefile definitions. 
prefix = /usr/local 

exec_prefix = ${prefix} 
bindir = ${exec_prefix}/bin 
libdir = ${exec_prefix}/lib 
infodir = ${prefix}/share/info 
includedir = ${prefix}/include 
datadir = ${prefix}/share 
docdir = $(datadir)/doc/telescope 
localedir = $(datadir)/locale 

mandir = ${prefix}/share/man 
manpfx = man 
man1ext = .1 
man1dir = $(mandir)/$(manpfx)1man3ext = .3man3dir = $(mandir)/$(manpfx)3 

htmldir = ${docdir} 

SRCDIR = ./src 
BINDIR = ./bin 
OBJECTDIR = ./Obj 
MAINOBJS = $(OBJECTDIR)/telescope.o 
MAINEXEC = $(BINDIR)/telescope 

OBJECTS1 = $(MAINOBJS) 

all: $(EXEC) 

$(EXEC): $(OBJECTS1) 
    $(CC) $(CFLAGS) $(OBJECTS1) $(LDFLAGS) -o $(MAINEXEC) 

$(OBJECTDIR)/telescope.o: $(SRCDIR)/telescope.c 
    $(CC) $(CFLAGS) -c $(SRCDIR)/telescope.c -o $(OBJECTDIR)/telescope.o 


clean: 
    rm -f $(EXEC) $(MAINEXEC) $(OBJECTS1) 


# build tests 
build-tests: .build-tests-post 

.build-tests-pre: 
# Add your pre 'build-tests' code here... 

.build-tests-post: .build-tests-impl 
# Add your post 'build-tests' code here... 

# run tests 
test: .test-post 

.test-pre: 
# Add your pre 'test' code here... 

.test-post: .test-impl 
# Add your post 'test' code here... 

これは、メイクファイルのコードが存在します。私はここでsqlite3をリンクする方法を理解していない。

+4

'LDFLAGS'の最後に' -lsqlite3'を追加しても動作しませんか? – Djee

+1

"私はいくつかのことを試みたが、何も働かなかった。"何を試してみましたか?もしあなたが何を間違っているかもしれないか教えてもらえませんか? – kaylum

答えて

1

ダイナミック(* .so)ライブラリとリンクする場合は、オリジナルのmakeファイルを変更する必要があります。特に、あなたはこのように見えるLDFLAGSラインを変更する必要があります。

LDFLAGS = -lxml2 -lpthread -lm -lz -lsqlite3 
+0

ありがとう!出来た。 – Nikhila

0

私が正しく理解し、テンプレートとしてそのMakefileを使用したい場合。これは、この単純なコマンドのために少し大きめですが、あなたはそれをしたい場合:

問題の行が

LDFLAGS = ... 

-lzの後ろにあなたのを追加しています。本当にcliDemoだけをビルドしたい場合は、CFLAGS =LDFLAGS =の背後にある他のすべてのものを削除します。これらの変数はコマンドラインを構築するために使用されるためです。

telescopecliDemoに置き換え、cliDemo.cをsrcディレクトリに置きます。意味

$(OBJECTDIR)/%.o: $(SRCDIR)/%.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

は「あなたが実行してobj/*.cからパターンobj/*.oの任意のファイルを作成することができます:

はまた、私はMakefileのルール

$(OBJECTDIR)/telescope.o: $(SRCDIR)/telescope.c 
    $(CC) $(CFLAGS) -c $(SRCDIR)/telescope.c -o $(OBJECTDIR)/telescope.o 

は、一般的なルールに交換する必要があることだと思います$(CC)と$(CFLAGS)は上で定義した内容に置き換えられます$ <はコロンのファイル名の右手に置き換えられ、$ @はファイル名の左手に置き換えられます。第二の李neは空白ではなく実際のタブでインデントされています。

あなたにアドバイスを与えてください:おそらく、ロジックを理解するためにMakefileチュートリアルを読むことをお勧めします。とにかくMakefileをデバッグするのは難しいですが、プロシージャの記述ではなく、一連のルールの定義であることを知らない場合はほとんど不可能です。

関連する問題