为 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)
修改运行成功。
我有一个 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)
修改运行成功。