web-dev-qa-db-fra.com

Comment utiliser pkg-config dans Make

Je veux compiler le programme GTK le plus simple. Je peux le compiler en utilisant la ligne de commande:

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

Cependant, si j'utilise Make it does not work:

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)

Cela me dit ceci:

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

Où dois-je coller $ (pkg-config --cflags --libs gtk + -3.0) dans le Makefile pour le faire compiler?

Merci d'avance pour votre aimable aide.

21
Jenia Ivanov

Il y a deux problèmes.

Tout d'abord, votre ligne CFLAGS est incorrecte: vous avez oublié de dire gtk+-3.0 Dans la partie pkg-config, Donc pkg-config Va cracher une erreur à la place:

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

Deuxièmement, et plus important encore, $(...) est intercepté par make lui-même pour la substitution de variables. En fait, vous l'avez déjà vu:

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

all: $(EXECUTABLES)

tout se fait par marque.

Il y a deux choses que tu peux faire.

Tout d'abord, vous pouvez utiliser `...` À la place, ce qui fait la même chose ($(...) est une syntaxe Shell plus récente).

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

Deuxièmement, puisque vous semblez utiliser GNU make, vous pouvez utiliser la commande de substitution Shell, qui a été montrée dans la réponse Basile Starynkevitch liée ci-dessus:

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