2016-01-13 70 views
1

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

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 [email protected] 

我试图为GTK + 3.0做相同,但都没有成功的网络一直都是相对于示例文件,而不是项目整体上的例子(由多个源文件)。这样一个如:为GTK +

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

Make文件是:

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 [email protected] 

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

回答

1

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 [email protected] $(PACKAGE) 

的变化成功运行。

+0

我后来发现了这个,但这里有一个非常好的解释。 http://blog.borovsak.si/2009/09/glade3-tutorial-6-signals.html – madD7

1

应该

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

,而不是LIB

请与您的make -p内置的规则。

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

+0

但我还没有使用过LIB – madD7

+0

并且内建规则未知LIB,所以你的LIB是错误的。 –