gpt4 book ai didi

c - 如何在 Make 中使用 pkg-config

转载 作者:太空狗 更新时间:2023-10-29 16:28:35 28 4
gpt4 key购买 nike

我想编译最简单的 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

我应该把 $(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)

关于c - 如何在 Make 中使用 pkg-config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533059/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com