如何在Make中使用pkg-config

我想编译最简单的GTK程序。 我可以使用命令行编译它:

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

但是,如果我使用Make它不起作用:

 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  ^ compilation terminated. : recipe for target 'main.o' failed make: *** [main.o] Error 1 

我在哪里将Make(pkg-config –cflags –libs gtk + -3.0)粘贴到Makefile中以使其编译?

非常感谢你的帮助。

有两个问题。

首先,你的CFLAGS行错了:你忘了在pkg-config部分说gtk+-3.0 ,所以pkg-config会吐出一个错误:

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

其次,更重要的是, $(...)通过make本身进行变量替换来截获。 事实上,你已经看过了:

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

完全由make完成。

你可以做两件事。

首先,您可以使用`...` ,它可以使用相同的东西( $(...)是更新的shell语法)。

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

其次,由于您似乎使用的是GNU make,因此您可以使用shell替换命令,该命令在上面链接的Basile Starynkevitch的答案中显示:

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

解决指出的错误:

“main.c:1:21:致命错误:gtk / gtk.h:没有这样的文件或目录”

错误消息说它找不到gtk / gtk.h文件

通过添加gcc编译语句的正确路径来更正:

 'gcc -g -Wall -Wextra -c -o main.o main.c -I./gtk' -- this is a capital 'I' 

通过将路径和库名称添加到gcc链接语句来更正:

 'gcc -g -Wall -Wextra -o main main.o -L -lgtk+-3.0' -- this is a capital 'L' then a lower case 'l' 

查看pkg-config文件以确切了解它包含/执行的内容也是非常值得的

 This link:  will give you all the info on the parameters to gcc