c - 即使使用 pkg-config 也找不到 'gtk/gtk.h' 文件

标签 c linux makefile gtk gtk3

我正在使用 SDL 库和 GTK+3 在 C 中创建一个软件。我第一次尝试在特定的 main.c 上使用 GTK+3,它的 Makefile 运行良好,但是当我尝试使用我的“真实”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的头文件:

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

最佳答案

正如 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)。 非常感谢!

关于c - 即使使用 pkg-config 也找不到 'gtk/gtk.h' 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937451/

相关文章:

c - 文件 C 程序中奇怪的 getchar() 输出

c++ - C/C++ 相当于 Bash "readlink -f"

VirtualProtectEx 的 Linux 等效项?

mysql - makefile 错误 ----> make : *** No rule to make target `mysql.h'

c - fgets 和 sscanf 两次获取列表值

c - 如何将 Atmega32 上的引脚连接到 4 位 LCD,以便此代码正常工作

Linux 外壳 : remove all HTML files in tree while leaving directory structure

linux - 重复调用bash脚本时如何使用一个环境变量

windows - mingw make 无法处理路径中的空格?

c - 如何在 ubuntu 14.04 上安装 .c 和 Makefile 驱动程序