2016-12-02 14 views
5

Tworzę oprogramowanie w C przy użyciu biblioteki SDL i GTK + 3. Moja pierwsza próba z GTK + 3 na konkretnym main.c i jego Makefile działa dobrze, ale kiedy próbuję dodać mój projekt GTK do drugiego fragmentu kodu używając mojego "prawdziwego" Makefile, nawet jeśli dodałem te same flagi dla GTK +3, nie mogę skompilować i dostać błąd gtk/gtk.h file no found. Odwiedziłem wiele wątków dotyczących tego błędu, ale nadal nie mogę sprawić, by działało.Nie można znaleźć pliku "gtk/gtk.h" Nawet z pkg-config

Oto mój stary Makefile, czyniąc to wszystko działa:

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 

A oto jeden używam dla projektu:

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 

i błąd:

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

Zbiorniki uwaga :)

[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 

A nagłówek main.c:

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

Przepraszamy za pytanie, ale: czy masz ten plik nagłówkowy? Powinien być w pakiecie devel gtk ... jaki jest wynik działania 'pkg-config'? – MirkoBanchi

+0

Ja zredagowałem moje pytanie, dziękuję;) –

+0

Mam debian i wszystko jest zainstalowane, także kiedy używam pierwszego Makefile Mogę skompilować i uruchomić oprogramowanie testowe, które zawiera gtk/gtk.h –

Odpowiedz

3

po prostu zapomniał dodać CPPFLAGS z regułą $ (obiektów)

To powinno wyglądać tak:

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

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

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

3

Jak powiedział Y. Verzun, zapomniałem dodać regułę CPPFLAGS, ale nie tylko do obiektów:

$(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 "$<"" 

oto kod działa, zauważyć w obu $ (CPPFLAGS) dodał. Wielkie dzięki!

Powiązane problemy