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.
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)