'gtk/gtk.h' 找不到文件即使 pkg-config
'gtk/gtk.h' file not found Even with pkg-config
我正在使用 SDL 库和 GTK+3 在 C 中创建一个软件。我第一次尝试在特定 main.c 上使用 GTK+3,它的 Makefile 运行良好,但是当我尝试使用我的 "real" Makefile 将我的 GTK 项目添加到另一段代码时,即使我添加了GTK+3 的相同标志,我无法编译并得到 gtk/gtk.h file no found
错误。我访问了很多关于这个错误的帖子,但我仍然无法解决这个问题。
这是我的旧 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 $@
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@
@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的header:
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include "neural.h"
您只是忘记将 CPPFLAGS 添加到规则 $(OBJECTS)
它应该看起来像:
$(OBJECTS): $(OBJDIR)/%.o :
$(SRCDIR)/%.c@$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
@echo "[OK] Compiled "$<""
正如 Y. Verzun 所说,我忘记添加 CPPFLAGS 规则,但不仅限于对象:
$(BINDIR)/$(TARGET): $(OBJECTS)
@$(CC) $(OBJECTS) $(LDLIBS) $(CPPFLAGS) -o $@
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
@echo "[OK] Compiled "$<""
这是有效的代码,请注意添加的两个 $(CPPFLAGS)。
非常感谢!
我正在使用 SDL 库和 GTK+3 在 C 中创建一个软件。我第一次尝试在特定 main.c 上使用 GTK+3,它的 Makefile 运行良好,但是当我尝试使用我的 "real" Makefile 将我的 GTK 项目添加到另一段代码时,即使我添加了GTK+3 的相同标志,我无法编译并得到 gtk/gtk.h file no found
错误。我访问了很多关于这个错误的帖子,但我仍然无法解决这个问题。
这是我的旧 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 $@
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@
@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的header:
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include "neural.h"
您只是忘记将 CPPFLAGS 添加到规则 $(OBJECTS)
它应该看起来像:
$(OBJECTS): $(OBJDIR)/%.o :
$(SRCDIR)/%.c@$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
@echo "[OK] Compiled "$<""
正如 Y. Verzun 所说,我忘记添加 CPPFLAGS 规则,但不仅限于对象:
$(BINDIR)/$(TARGET): $(OBJECTS)
@$(CC) $(OBJECTS) $(LDLIBS) $(CPPFLAGS) -o $@
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
@echo "[OK] Compiled "$<""
这是有效的代码,请注意添加的两个 $(CPPFLAGS)。 非常感谢!