我有一个make文件,它为所有源文件创建obj文件,然后使用这些obj文件创建可执行文件(基本上编译每个单独的文件,然后将它们全部链接在一起)。
scanf
我尝试对gtk + 3.0做同样的事情但是没有成功,因为网上的例子总是与示例文件有关,而不是整个项目(包含多个源文件)。例如:
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 +创建文件是:
$ cc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello
但这不起作用。它给出了错误(对#&gt; gtk_init&#39;以及其他gtk函数的未定义引用) 我应该做些什么修改?
答案 0 :(得分:1)
应该是
LDLIBS = $(shell pkg-config --libs gtk+-3.0)
而不是LIB
使用make -p
内置规则进行检查。
另见this example。请参阅$(LINK.o)
变量等
答案 1 :(得分:1)
CFLAGS 必须包含 -c ,或者在编译时必须包含 CFLAGS 。此外,链接期间必须包含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)
更改成功运行。