C++ makefile和gtkmm存在问题

C++ makefile和gtkmm存在问题,c++,makefile,gtkmm,C++,Makefile,Gtkmm,我目前正试图用gtkmm编写一个简单的程序,但在编译时遇到了一些问题。我有几个简单的文件:main.cc,它只包含main函数,test.cc和test.h,它们定义了一个基于类的Gtk::Window,其中有一对按钮,最后是一个简单的makefile 当我尝试编译makefile时出现问题,它返回: In file included from main.cc:2: test.h:12: fatal error: gtkmm.h: No such file or directory 如果随后将

我目前正试图用gtkmm编写一个简单的程序,但在编译时遇到了一些问题。我有几个简单的文件:main.cc,它只包含main函数,test.cc和test.h,它们定义了一个基于类的Gtk::Window,其中有一对按钮,最后是一个简单的makefile

当我尝试编译makefile时出现问题,它返回:

In file included from main.cc:2:
test.h:12: fatal error: gtkmm.h: No such file or directory
如果随后将
#include
替换为
#include
,则返回错误:

In file included from test.h:12,
                 from main.cc:2:
/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory
我搜索解决方案已经有一段时间了,并在网上四处寻找,但对于其他有类似问题的用户来说,这是因为他们的makefile中没有包含“pkg config--cflags--libs gtkmm-2.4”。不幸的是,这不是我问题的根源,因为我一直都有这个问题

最奇怪的是,当我不使用makefile时,它可以工作。如果我从main.cc获取main函数并将其放入test.cc文件中,则键入:

g++ test.cc -o output `pkg-config --cflags --libs gtkmm-2.4`
在控制台中,它工作正常。这只是一个暂时的修复,因为我现在需要有多个类。我不知道这是否是make或gtkmm安装的问题,我尝试过重新安装这两个,但都没有效果。我不知道还能尝试什么

最后,如果有帮助的话,我运行的是Ubuntu 10.10和g++版本4.4.5

谢谢你的帮助

生成文件如下所示:

main: main.o
    @echo "Main"
    @g++ -g main.cc test.o -o output `pkg-config --cflags --libs gtkmm-2.4` 
test.o:
    @echo "Test"
    @g++ test.cc -o test.o `pkg-config --cflags --libs gtkmm-2.4`
clean:
    @clear
    @rm -f *.o
此错误:

/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory`
建议您必须将glibmm-2.4添加到pkg config搜索:

main: main.o
    @echo "Main"
    @g++ -g main.cc test.o -o output `pkg-config --cflags --libs gtkmm-2.4 glibmm-2.4` 
test.o:
    @echo "Test"
    @g++ test.cc -o test.o `pkg-config --cflags --libs gtkmm-2.4 glibmm-2.4`
clean:
    @clear
    @rm -f *.o

我也遇到了同样的问题,我通过在构建(编译和链接)的两个步骤中添加
pkg config gtkmm-3.0--cflags--libs
解决了这个问题。我的生成文件:

CC=g++
CFLAGS=-c -Wall 
LDFLAGS=
SOURCES=WatsonGui.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=watsonGui

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@ `pkg-config gtkmm-3.0 --libs`

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@ `pkg-config gtkmm-3.0 --cflags`

clean:
    rm -rf *.o watsonGui 
CC=g++
CFLAGS=-c-墙
LDFLAGS=
来源=WatsonGui.cpp
对象=$(源:.cpp=.o)
可执行文件=watsonGui
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(OBJECTS)-o$@`pkg config gtkmm-3.0--libs`
.cpp.o:
$(CC)$(CFLAGS)$<-o$@`pkg config gtkmm-3.0--CFLAGS`
清洁:
rm-rf*.o watsonGui
请注意,用于pkg config的引号类型很重要,如果使用“而不是”则无效


注:我是makefiles的新手,所以我不能完全确定我做了什么。

如果您能发布makefile的代码或编译器调用的输出,这可能会有所帮助,这样我们就可以看到编译器是如何被精确调用的。第二点是@Grizzly说的,除非您发布makefile的内容,否则我们无法提供帮助。
gtkmm.h
glibmm.h
位于
/usr/include/gtkmm-2.4/
中。您可以运行
make-n
查看编译时使用的命令。这将向您展示您的工作命令行与make尝试执行的操作之间的差异。您还可以运行
pkg config--cflags--libs gtkmm-2.4
查看输出内容,并验证是否列出了所有正确的include目录。不幸的是,这似乎无法解决问题,它只返回相同的错误。只有当我在头文件中指定gtkmm的路径时,才会出现这个错误,否则它只会返回一个找不到gtkmm的错误,我一直都包含了这个错误。无论如何谢谢你的帮助!嗯,这对我来说很有用。您确定已安装libglibmm和libgtkmm的标头吗
sudo apt get install libglibmm-2.4-dev libgtkmm-2.4-dev
之后,在源代码上使用
#include
。是的,这两个都说它们是在我使用apt get时安装的。我开始认为pkg config存在一些问题,但我不知道如何开始尝试修复该问题。将
-I/usr/include/glibmm-2.4
添加到编译行,并告诉我们下一个错误是什么。但是请确保您正在使用
#include
,好吗?