我想编译最简单的GTK程序。我可以使用命令行进行编译:
gcc $(pkg-config --cflags --libs gtk+-3.0) main.c -o main.o
但是,如果我使用使它不起作用:
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
行是错误的:您忘记在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)
要解决所指示的错误:
“ 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<pathtolibrary> -lgtk+-3.0'
-- this is a capital 'L' then a lower case 'l'
同时查看pkg-config文件以查看其确切包含/执行的内容也非常值得
此链接:
gcc-3将为您提供有关gcc参数的所有信息