2016-12-02 12 views
5

मैं एसडीएल लाइब्रेरी और जीटीके + 3 का उपयोग कर सी में एक सॉफ्टवेयर बना रहा हूं। एक विशिष्ट main.c पर GTK + 3 के साथ मेरा पहला प्रयास और इसकी मेकफ़ाइल अच्छी तरह से काम करता है, लेकिन जब मैं अपनी "असली" मेकफ़ाइल का उपयोग करके कोड के दूसरे भाग में अपनी जीटीके प्रोजेक्ट जोड़ने की कोशिश करता हूं, भले ही मैंने जीटीके के लिए एक ही झंडे जोड़े हों +3, मैं संकलित नहीं कर सकता और gtk/gtk.h file no found त्रुटि प्राप्त नहीं कर सकता। मैंने इस त्रुटि के बारे में कई धागे का दौरा किया लेकिन मैं अभी भी इसे काम नहीं कर सकता।'gtk/gtk.h' फ़ाइल नहीं मिली pkg-config

यहाँ मेरे पुराने Makefile है, जिससे चीजें काम:

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 

और यहाँ एक मैं इस परियोजना के लिए उपयोग करें:

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 

और त्रुटि: के लिए

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

टैंक ध्यान :)

[संपादित करें]

~                    
    ▶ 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 

और main.c के शीर्षक:

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

क्षमा करें, प्रश्न के लिए लेकिन: क्या आपके पास हेडर फ़ाइल है? यह gtk डेवेल पैकेज में होना चाहिए ... 'pkg-config' का आउटपुट क्या है? – MirkoBanchi

+0

मैंने अपना प्रश्न संपादित किया, धन्यवाद;) –

+0

मेरे पास डेबियन है, और हरिंग स्थापित है, जब मैं पहली मेकफ़ाइल का उपयोग करता हूं तो मैं संकलित और परीक्षण सॉफ्टवेयर चला सकता हूं जिसमें gtk/gtk.h –

उत्तर

3

आप बस नियम $ करने के लिए CPPFLAGS जोड़ने के लिए भूल गया (वस्तुओं)

यह तरह दिखना चाहिए:

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

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

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

3

के रूप में वाई Verzun कहा, मैं CPPFLAGS नियम जोड़ने के लिए भूल गया, लेकिन न केवल वस्तुओं के लिए:

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

यहाँ काम, $ के दोनों नोटिस कोड है (CPPFLAGS) जोड़ा गया। बहुत बहुत धन्यवाद!

संबंधित मुद्दे