web-dev-qa-db-ja.com

Makeでpkg-configを使用する方法

最も単純なGTKプログラムをコンパイルしたい。コマンドラインを使用してコンパイルできます:

gcc $(pkg-config --cflags --libs gtk+-3.0)  main.c -o main.o

ただし、Make itが機能しない場合:

CFLAGS=-g -Wall -Wextra $(pkg-config --cflags)
LDFLAGS=$(pkg-config --libs gtk+-3.0)
CC=gcc

SOURCES=$(wildcard *.c)
EXECUTABLES=$(patsubst %.c,%,$(SOURCES))

all: $(EXECUTABLES)

それは私にこれを伝えます:

gcc -g -Wall -Wextra    -c -o main.o main.c
main.c:1:21: fatal error: gtk/gtk.h: No such file or directory
 #include <gtk/gtk.h>
                     ^
compilation terminated.
<builtin>: recipe for target 'main.o' failed
make: *** [main.o] Error 1

Makefileの$(pkg-config --cflags --libs gtk + -3.0)をどこに貼り付けてコンパイルしますか?

よろしくお願いします。

21
Jenia Ivanov

2つの問題があります。

まず、あなたのCFLAGS行が間違っています:_gtk+-3.0_の部分で_pkg-config_と言うのを忘れたので、代わりに_pkg-config_がエラーを吐き出します:

_CFLAGS=-g -Wall -Wextra $(pkg-config --cflags gtk+-3.0)
_

次に、より重要なのは、$(...)が変数置換のためにmake自体によってインターセプトされることです。実際、あなたはすでにこれを見てきました:

_SOURCES=$(wildcard *.c)
EXECUTABLES=$(patsubst %.c,%,$(SOURCES))

all: $(EXECUTABLES)
_

すべてmakeによって行われます。

できることは2つあります。

最初に、代わりに_`...`_を使用できます。これは同じことを行います($(...)は新しいシェル構文です)。

_CFLAGS=-g -Wall -Wextra `pkg-config --cflags gtk+-3.0`
LDFLAGS=`pkg-config --libs gtk+-3.0`
_

2番目に、GNU makeを使用しているように見えるので、上記のリンクのBasile Starynkevitchの回答に示されているShell置換コマンドを使用できます。

_CFLAGS=-g -Wall -Wextra $(Shell pkg-config --cflags gtk+-3.0)
LDFLAGS=$(Shell pkg-config --libs gtk+-3.0)
_
33
andlabs