【问题标题】:make file for Gtk为 Gtk 制作文件
【发布时间】:2016-01-13 19:57:16
【问题描述】:

我有一个 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 函数的未定义引用) 我应该做哪些修改?

【问题讨论】:

    标签: makefile gtk gtk3


    【解决方案1】:

    应该是

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

    而不是LIB

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

    也请查看this example。见$(LINK.o)变量等

    【讨论】:

    • 但我没用过LIB
    • LIB 是内置规则未知的,所以你的LIB 是错误的。
    【解决方案2】:

    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)
    

    更改成功运行。

    【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多