2017-03-04 42 views
0

我想用make編譯GTK +的例子,但是當我運行它,終端說「使:***沒有規則,使目標‘全部’停止」爲什麼在終端工作時直接用gcc編譯而不是用make文件編譯?

然而,當我通過鍵入以下編譯,它編譯成功。

gcc -g -Wall -o exampleapp main.c exampleapp.c exampleapp.h exampleappwin.c exampleappwin.h -export-dynamic `pkg-config --cflags --libs gtk+-3.0` 

這就是我把我的make文件:

NAME=exampleapp 
CFLAGS=-g -Wall -o $(NAME) 
GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-3.0` 
SRCS=       \ 
    main.c      \ 
    exampleapp.c exampleapp.h \ 
    exampleappwin.c exampleappwin.h 
CC=gcc 

all: main 

main: $(SRCS) 
$(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS) 

clean: 
/bin/rm -f $(NAME) 

是有毛病我生成文件?如果是這樣,我該如何糾正它?

+0

我得到的'Makefile:13:***缺少分隔符。 Stop.'。當我修復標籤時,它似乎工作。我會建議你複習[這個答案](http://stackoverflow.com/a/1484873/2970947)。 –

+0

該行開始'$(CC)'應 –

+0

好,感謝地標籤。但現在我得到「gtk/gtk.h:沒有這樣的文件或目錄」。我想知道如何在不使用make文件的情況下成功找到gtk頭文件。我提到的兩個不一樣嗎? – 15012011

回答

1

你缺少你的Makefile的規則部分一些標籤。

它應該看起來像:

all: main 

main: $(SRCS) 
    $(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS) 

clean: 
    /bin/rm -f $(NAME) 

注意,動作行必須以文字製表符縮進,不帶空格。 (堆棧溢出轉換的標籤爲四個空格 - !不只是複製和粘貼)

0

有與發佈的makefile的幾個問題。

建議使用以下內容,其中的配方行正確縮進<tab>,並使用:=生成宏,以便每次在生成文件中引用它們時不重新評估它們。

此示例生成文件還糾正了食譜編譯和鏈接

NAME=exampleapp 

CFLAGS := -g -Wall -Wextra -pedantic -std=gnu11 -c 

GTKFLAGS := -export-dynamic `pkg-config --cflags --libs gtk+-3.0` 

SRCS :=   \ 
    main.c   \ 
    exampleapp.c \ 
    exampleappwin.c 

OBJS := $(SRCS:.c=.o) 

HDRS := exampleapp.h examplappwin.h 

CC := /usr/bin/gcc 
RM := /bin/rm 

.PSEUDO: all clean 

all: $(NAME) 

%.o:%.c $(HDRS) 
<tab>$(CC) $(CFLAGS) -o [email protected] $< -I. 

$(NAME): $(OBS) 
<tab>$(CC) $> $(GTKFLAGS) -o [email protected] 

clean: 
<tab>$(RM) -f $(NAME) $(OBJS) 

注:<tab>必須用製表符實際的文件替換

相關問題