Makefile 为Gtk制作文件

Makefile 为Gtk制作文件,makefile,gtk,gtk3,Makefile,Gtk,Gtk3,我有一个make文件,它为所有源文件创建obj文件,然后使用这些obj文件创建可执行文件(基本上是编译每个文件,然后将所有文件链接在一起) gtk+的生成文件为: CC = gcc SRC_DIR = . INC_DIR = . OBJ_DIR = Obj CFLAGS = -Wall -g -o PACKAGE = `pkg-config --cflags --libs gtk+-3.0` LIBS = `pkg-config --libs gtk+-3.0` EXE = Gui SRCS

我有一个make文件,它为所有源文件创建obj文件,然后使用这些obj文件创建可执行文件(基本上是编译每个文件,然后将所有文件链接在一起)

gtk+的生成文件为:

CC = gcc
SRC_DIR = .
INC_DIR = .
OBJ_DIR = Obj
CFLAGS = -Wall -g -o
PACKAGE = `pkg-config --cflags --libs gtk+-3.0`
LIBS = `pkg-config --libs gtk+-3.0`
EXE = Gui

SRCS = $(SRC_DIR)/main.c 
OBJS = $(OBJ_DIR)/main.o 

main : clean build       

build: $(OBJS)
    $(CC) $(OBJS) -o $(EXE)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
        $(CC) $(PACKAGE) $(CFLAGS) $< -o $@ 
CC=gcc
SRC_DIR=。
INC_DIR=。
OBJ_DIR=OBJ
CFLAGS=-Wall-g-o
PACKAGE=`pkg config--cflags--libs gtk+-3.0`
LIBS=`pkg config--LIBS gtk+-3.0`
EXE=Gui
SRCS=$(SRC\u DIR)/main.c
OBJS=$(OBJ_DIR)/main.o
主营:清洁建造
生成:$(OBJS)
$(CC)$(OBJS)-o$(EXE)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
$(CC)$(PACKAGE)$(CFLAGS)$<-o$@
但这不起作用。它给出错误(未定义对“gtk_init”和其他gtk函数的引用) 我应该做什么修改?

应该是

 LDLIBS = $(shell pkg-config --libs gtk+-3.0)
而不是
LIB

使用
make-p
检查您的内置规则

再看看。请参阅
$(LINK.o)
变量等。

CFLAG必须具有-c,或者在编译时必须包含该属性。此外,链接期间必须包含pkg配置

更改后,生成文件变为:

build: $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(EXE) $(LIBS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) ***-c*** -I$(INC_DIR) $< -o $@ $(PACKAGE)
build:$(OBJS)
$(CC)$(CFLAGS)$(OBJS)-o$(EXE)$(LIBS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
美元(CC)$(CFLAGS)***-c***-I$(公司董事)$<-o$(一揽子)

更改成功运行。

但我没有使用LIBAnd
LIB
是内置规则未知的,因此您的
LIB
是错误的。我后来发现了这一点,但这里有一个很好的解释。
 LDLIBS = $(shell pkg-config --libs gtk+-3.0)
build: $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(EXE) $(LIBS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) ***-c*** -I$(INC_DIR) $< -o $@ $(PACKAGE)