2016-12-02 43 views
5

Tôi đang tạo phần mềm trong C bằng cách sử dụng thư viện SDL và GTK + 3. Nỗ lực đầu tiên của tôi với GTK + 3 trên main.c cụ thể và Makefile của nó hoạt động tốt, nhưng khi tôi cố gắng thêm dự án GTK của tôi vào đoạn mã khác bằng Makefile "thực" của tôi, ngay cả khi tôi thêm cùng cờ cho GTK +3, tôi không thể biên dịch và gặp lỗi gtk/gtk.h file no found. Tôi đã truy cập nhiều chủ đề về lỗi này nhưng tôi vẫn không thể làm cho nó hoạt động.'gtk/gtk.h' Ngay cả với pkg-config

Dưới đây là Makefile cũ của tôi, tiến hành mọi việc:

CC=clang 
CPPFLAGS= `pkg-config --cflags gtk+-3.0` 
CFLAGS= -Wall -Wextra -std=c99 -O2 
LDFLAGS= 
LDLIBS= `pkg-config --libs gtk+-3.0` `pkg-config gmodule-2.0 --libs` 
SRC= main.c 
OBJ= ${SRC:.c=.o} 
all: main 
main: ${OBJ} -lm 
clean: 
rm -f *~ *.o main 

Và đây là một trong những tôi sử dụng cho dự án:

CC=clang 

CPPFLAGS= `pkg-config --cflags sdl gtk+-3.0` 
CFLAGS= -Wall -Wextra -Werror -std=c99 -O2 -pedantic 
LDFLAGS= 
LDLIBS= `pkg-config --libs sdl` `pkg-config --libs gtk+-3.0` `pkg-config gmodule-2.0 --libs` -lgtk -lgdk -lglib -lX11 -lXext -lSDL -lSDL_image -lm 

SRCDIR = src 
OBJDIR = obj 
BINDIR = bin 

TARGET = main 

SOURCES := $(wildcard $(SRCDIR)/*.c) 
INCLUDES := $(wildcard $(SRCDIR)/*.h) 
DEPENDS := $(wildcard $(OBJDIR)/*.d) 
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 
rm  = rm -f 

all: makedirs $(BINDIR)/$(TARGET) 

$(BINDIR)/$(TARGET): $(OBJECTS) 
@$(CC) $(OBJECTS) $(LDLIBS) -o [email protected] 
@echo "Linking complete!" 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c 
@$(CC) $(CFLAGS) -c $< -o [email protected] 
@echo "[OK] Compiled "$<"" 

makedirs: 
@mkdir -p $(OBJDIR) 
@mkdir -p $(BINDIR) 
@echo "[OK] Created directories : $(BINDIR) $(OBJDIR)" 
[....] etc 

Và các lỗi:

src/main.c:2:14: fatal error: 'gtk/gtk.h' file not found 
#include <gtk/gtk.h> 

Si téc chở sự chú ý :)

[EDIT]

~                    
    ▶ pkg-config --libs gtk+-3.0 
    -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 

    ~                    
    ▶ pkg-config --cflags sdl gtk+-3.0 
    -D_GNU_SOURCE=1 -D_REENTRANT -pthread -I/usr/include/SDL -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 

Và tiêu đề của main.c:

#include <gtk/gtk.h>  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include "neural.h" 
+1

Xin lỗi, cho câu hỏi nhưng: bạn có tệp tiêu đề đó không? Nó phải ở trong gói gtk devel ... đầu ra của 'pkg-config' là gì? – MirkoBanchi

+0

Tôi đã chỉnh sửa câu hỏi của mình, cảm ơn;) –

+0

Tôi có debian và mọi cài đặt đều được cài đặt, khi tôi sử dụng Makefile đầu tiên, tôi có thể biên dịch và chạy phần mềm thử nghiệm bao gồm gtk/gtk.h –

Trả lời

3

Bạn chỉ cần quên để thêm CPPFLAGS đến sự cai trị $ (ĐỐI TƯỢNG)

Nó sẽ giống như thế:

$(OBJECTS): $(OBJDIR)/%.o : 

$(SRCDIR)/%[email protected]$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o [email protected]

@echo "[OK] Compiled "$<""

3

Như Y. Verzun nói, tôi quên để thêm sự cai trị CPPFLAGS, nhưng không chỉ đối với các đối tượng:

$(BINDIR)/$(TARGET): $(OBJECTS) 
@$(CC) $(OBJECTS) $(LDLIBS) $(CPPFLAGS) -o [email protected] 
@echo "Linking complete!" 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c 
@$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o [email protected] 
@echo "[OK] Compiled "$<"" 

đây là đoạn code làm việc, chú ý cả hai $ (CPPFLAGS) nói thêm. Cảm ơn rất nhiều!

Các vấn đề liên quan