我正在閱讀GTK +的基礎知識,因此決定編寫一個簡單的makefile,讓我運行「make」來編譯我剛剛編寫的示例程序。我還偶然發現Gnome團隊指定的編譯器指令列表here將幫助從GTK2轉移到GTK3,所以我想包括這些。使用Makefile的額外CFLAG
我爲所有意圖和目的的化妝菜鳥,所以這是我想出了:
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 [email protected] $<
%: %.o
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) $(GTK_LDFLAGS) -o [email protected] $<
.PHONY: clean
clean:
rm -f *.o *~
正如你可能已經猜到,這是行不通的完全正確。我知道在makefile中運行pkg-config並不是一個理想的解決方案,但是這對於我的小型學習項目而言並不適用於任何類型的部署。也就是說,輸出對我來說很奇怪,看起來好像在CFLAGS之後忽略任何變量。
喜歡的東西:
[[email protected] 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配置變量仍下落不明。
很明顯,我搞砸了一些簡單的東西,但經過一小時含糊糊糊的谷歌搜索之後,我對它是什麼有了新的想法。
此外,我很高興有什麼_else_我做錯了指出。 =) – musasabi
我沒有看到任何明顯的錯誤,我的頭頂。我建議在'$(shell ...)'的行上使用':='而不是'='。但是,只有獲得錯誤纔會導致對'pkg-config'的額外調用,這只是'make'期間的一個性能問題。不是造成這個問題的根本原因。 –
啊哈......我明白髮生了什麼事。你的主要目標是'helloworld',你直接從'helloworld.c'文件編譯它,而不是鏈接'helloworld.o'文件。你的'helloworld'目標是什麼樣的? –