使用Makefile的额外CFLAG

时间:2013-12-08 03:25:32

标签: gcc makefile

我正在阅读基础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变量仍然缺失。

对我来说很明显,我搞砸了一些简单的东西,但经过一个小时的措辞粗俗的谷歌搜索,我对这是什么感觉很清楚。

2 个答案:

答案 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)