我正在阅读基础GTK +并且这样做决定编写一个简单的makefile,让我运行“make”来编译我刚刚编写的示例程序。我还偶然发现了Gnome团队指定的编译器指令here列表将帮助从GTK2转移到GTK3,所以我想包含这些指令。
我是一个所有意图和目的的制作菜鸟,所以这就是我提出的:
CC = gcc
CFLAGS += -Wall
GTK_DFLAGS = -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE
GTK_CFLAGS = $(shell pkg-config --cflags gtk+-3.0)
GTK_LDFLAGS = $(shell pkg-config --libs gtk+-3.0)
%.o: %.c
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) -c -o $@ $<
%: %.o
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) $(GTK_LDFLAGS) -o $@ $<
.PHONY: clean
clean:
rm -f *.o *~
正如您可能猜到的那样,它不能正常工作。我知道从makefile里面运行pkg-config不是一个理想的解决方案,但这适用于我的小规模学习项目而不是任何类型的部署。也就是说,输出对我来说很奇怪;在CFLAGS之后,似乎只是忽略了任何变量。
类似的东西:
[patrick@blackbox ch2]$ make helloworld
gcc -Wall helloworld.c -o helloworld
helloworld.c:1:21: fatal error: gtk/gtk.h: No such file or directory
#include <gtk/gtk.h>
^
compilation terminated.
<builtin>: recipe for target 'helloworld' failed
make: *** [helloworld] Error 1
如果我添加GTK_DFLAGS的内容只是简单地添加到CFLAGS的末尾,它们会出现在命令行中,但pkg-config变量仍然缺失。
对我来说很明显,我搞砸了一些简单的东西,但经过一个小时的措辞粗俗的谷歌搜索,我对这是什么感觉很清楚。
答案 0 :(得分:1)
找到答案,当然还有我在提出这个问题/做早期搜索时所缺少的词汇。
CC = gcc
CFLAGS += -Wall -std=c11
GTK_DFLAGS = -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE
GTK_CFLAGS := $(shell pkg-config --cflags gtk+-3.0)
GTK_LDFLAGS := $(shell pkg-config --libs gtk+-3.0)
%: %.c
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) $(GTK_LDFLAGS) -o $* $*.c
.PHONY: clean
clean:
rm -f *~
这就是我想要的,即将任何名称的单个.c文件编译成我想要使用的GTK标志的同名程序。
感谢那些贡献的人!
答案 1 :(得分:0)
您的Makefile中需要helloworld
的目标。像这样:
helloworld: helloworld.o
$(CC) -o helloworld helloworld.o $(LDFLAGS) $(GTK_LDFLAGS)