如何在Make中使用pkg-config

Jen*_*nov 19 c gtk gcc makefile

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

gcc $(pkg-config --cflags --libs gtk+-3.0)  main.c -o main.o
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用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)
Run Code Online (Sandbox Code Playgroud)

它告诉我这个:

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
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你的帮助.

and*_*abs 33

有两个问题.

首先,你的CFLAGS路线是错误的:你忘记gtk+-3.0pkg-config部件中说,所以pkg-config会吐出一个错误:

CFLAGS=-g -Wall -Wextra $(pkg-config --cflags gtk+-3.0)
Run Code Online (Sandbox Code Playgroud)

其次,更重要的$(...)是,通过使自己变量替换来拦截.事实上,你已经看到了这个:

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

all: $(EXECUTABLES)
Run Code Online (Sandbox Code Playgroud)

完全由make完成.

你可以做两件事.

首先,你可以使用`...`,它做同样的事情($(...)是更新的shell语法).

CFLAGS=-g -Wall -Wextra `pkg-config --cflags gtk+-3.0`
LDFLAGS=`pkg-config --libs gtk+-3.0`
Run Code Online (Sandbox Code Playgroud)

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

CFLAGS=-g -Wall -Wextra $(shell pkg-config --cflags gtk+-3.0)
LDFLAGS=$(shell pkg-config --libs gtk+-3.0)
Run Code Online (Sandbox Code Playgroud)

  • 另一种方法是转义“$”字符:“$$(pkg-config --libs module)”。 (3认同)