如何在Make中使用pkg-config

时间:2015-02-16 00:52:01

标签: c gcc makefile gtk

我想编译最简单的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 <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)粘贴在哪里以使其编译?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:29)

有两个问题。

首先,您的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完成。

你可以做两件事。

首先,您可以使用`...`代替,$(...)是更新的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)

答案 1 :(得分:-3)

解决指出的错误:

&#34; main.c:1:21:致命错误:gtk / gtk.h:没有这样的文件或目录&#34;

错误消息说它无法找到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<pathtolibrary> -lgtk+-3.0'  
-- this is a capital 'L' then a lower case 'l'

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

This link:
<https://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_3.html>
will give you all the info on the parameters to gcc