【问题标题】:C code compilation failureC代码编译失败
【发布时间】:2011-01-22 21:50:58
【问题描述】:

我在下面有这个makefile,其中我的包含是

gtk/gtk.h

webkit/webkit.h

但是当我尝试使用 make 命令构建项目时,我遇到了错误

错误:gtk/gtk.h:没有这样的文件或目录

错误:webkit/webkit.h:没有这样的文件或目录

如果 gtk+-2.0.pc 和 webkit...pc 在 usr/lib/pkgconfig 中

制作文件:

CC=gcc
CFLAGS=-g -Wall `pkg-config --cflags gtk+-2.0 webkit-1.0`
LDFLAGS+=`pkg-config --libs gtk+-2.0 webkit-1.0`
INCLUDE=/usr/include
LIB=/usr/lib
SOURCES=wrapper.c wrapper.h browser.c
OBJ=browser

all:  $(SOURCES) $(OBJ)

$(OBJ): $(SOURCES)
 $(CC) $(CFLAGS) $(LDFLAGS) -I $(INCLUDE) -L $(LIB) $(SOURCES) -o $(OBJ)

clean:
 rm -rf $(OBJ)

【问题讨论】:

  • 你能发布运行 make 的实际输出吗?
  • 您是否安装了pkg-configpkg-config --cflags gtk+-2.0 webkit-1.0 从 shell 的输出是什么?

标签: c gcc ubuntu webkit gtk


【解决方案1】:

除了 CFLAGS 之外,尝试设置 CXXFLAGS。

【讨论】:

【解决方案2】:

反引号不是您在 Makefile 中运行 shell 命令的方式。您的 CFLAGS 和 LDFLAGS 行应该看起来像

CFLAGS=-g -Wall $(shell pkg-config --cflags gtk+-2.0 webkit-1.0)
LDFLAGS+=$(shell pkg-config --libs gtk+-2.0 webkit-1.0)

【讨论】:

  • 虽然您是对的,但您需要$(shell ...) 才能让命令在 Makefile 中运行,但使用反引号没有任何问题。使用反引号,make 会将带有反引号的命令行传递给 shell,shell 会在调用编译器之前处理它。
  • 没有变化起来
  • make 文件没有错误,错误出在系统环境中,请问谁可以更改它以使其运行
  • @R Samuel Klatchko:你说得对。我忘记了这种行为。
  • 另外,使用$(shell ...)而不是反引号意味着pkg-config只被调用两次(一次用于CFLAGS,一次用于LDFLAGS),而不是每次调用$(CC)两次。
【解决方案3】:

您指定的唯一包含路径是/usr/include,因此它将在以下位置查找文件:

/usr/include/gtk/gtk.h
/usr/include/webkit/webkit.h

除非您在 CPATH 或 C_INCLUDE_PATH 环境变量中指定了其他路径。

usr/lib/pkgconfig 添加为-I 路径。

【讨论】:

  • $(CFLAGS) 包含从 pkg-config 返回的附加 -I 指令,它将指定在哪里可以找到 gtk 和 webkit 标头。
  • @jamessan:除非这行得通并且文件存在,否则它会找到它们,因此如果不是永久解决方案,手动添加它是一个有用的调查。
【解决方案4】:

/usr/include 目录中是否真的有 gtk/gtk.h 和 webkit/webkit.h?是否安装了提供它们的开发包?

【讨论】:

  • 是的,我在包含目录下有这个文件
  • 拥有 /usr/include/gtk/gtk.h 和 /usr/include/webkit/webkit.h 并将 `...` 更改为 $(shell ...) 你不应该拥有一个问题,这个makefile适用于这个变化。
猜你喜欢
  • 2015-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2011-03-27
  • 2010-12-31
相关资源
最近更新 更多