为 Gtk 制作文件

make file for Gtk

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

CC = gcc
SRC_DIR = src
INC_DIR = inc
OBJ_DIR = obj
CFLAGS = -c -Wall -I$(INC_DIR)
EXE = project

SRCS = $(SRC_DIR)/main.c $(SRC_DIR)/file1.c            # and so on...
OBJS = $(OBJ_DIR)/main.o $(OBJ_DIR)/file1.o            # and so on...

main : clean build

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

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

我尝试对 gtk+3.0 做同样的事情,但没有成功,因为网络上的示例总是针对示例文件,而不是整个项目(包含多个源文件)。一个这样的例子:

$ cc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello

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 $@ 

但这行不通。它给出错误(对 'gtk_init' 和其他 gtk 函数的未定义引用) 我应该做什么修改?

应该是

 LDLIBS = $(shell pkg-config --libs gtk+-3.0)

而不是LIB

检查 make -p 你的内置规则。

另请参阅 this example。参见 $(LINK.o) 变量等

CFLAGS 必须有 -c 或必须在编译时包含。此外,pkg-config 必须在链接期间包含。

修改后make文件变为:

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

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

修改运行成功。