Проблема с makefile и gtkmm - PullRequest
3 голосов
/ 22 июня 2011

В настоящее время я пытаюсь написать простую программу с помощью gtkmm, но у меня возникают проблемы, когда я пытаюсь ее скомпилировать. У меня есть несколько простых файлов: main.cc, который содержит только основные функции, test.cc и test.h, которые определяют основанный на классе Gtk :: Window с парой кнопок в нем, и, наконец, простой make-файл.

Проблема возникает, когда я пытаюсь скомпилировать make-файл, он возвращает:

In file included from main.cc:2:
test.h:12: fatal error: gtkmm.h: No such file or directory

Если затем заменить #include <gtkmm.h> на #include <gtkmm-2.4/gtkmm.h>, возвращается ошибка:

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

Я некоторое время искал решение и искал его в Интернете, но у других пользователей, у которых была похожая проблема, это было вызвано отсутствием `pkg-config --cflags --libs gtkmm-2.4` в их makefile. К сожалению, это не было источником моей проблемы, так как она у меня была все время.

Самое странное, что это работает, когда я не использую make-файл. Если я возьму функцию main из своего файла main.cc и вставлю ее в файл test.cc, введите:

g++ test.cc -o output `pkg-config --cflags --libs gtkmm-2.4`

в консоль, работает нормально. Это только временное исправление, так как я подхожу к тому, что мне нужно иметь более одного класса. Я не знаю, если это какая-то проблема с установкой make или gtkmm, и попытался переустановить оба, но безрезультатно. Я не знаю, что еще попробовать.

Наконец, если это помогает, я запускаю Ubuntu 10.10 с g ++ версии 4.4.5

Спасибо за любую помощь

Makefile выглядит следующим образом:

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

Ответы [ 2 ]

2 голосов
/ 18 ноября 2014

У меня была та же проблема, и я решил ее, добавив pkg-config gtkmm-3.0 --cflags --libs к обоим этапам сборки (компиляция и компоновка).Мой make-файл:

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 

Обратите внимание, что тип кавычек, используемых для pkg-config, важен, если вы используете «вместо», он не работает.

PS: I 'Я новичок в makefiles, поэтому я не совсем уверен в том, что я сделал.

1 голос
/ 24 июня 2011

Эта ошибка:

/usr/include/gtkmm-2.4/gtkmm.h:87: fatal error: glibmm.h: No such file or directory`

предполагает, что необходимо добавить glibmm-2.4 к pkg-config search:

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
...