본문 바로가기
컴퓨터 관련/Linux || Unix

[GTK+] 1. GTK+ 소개

by _BlankSpace 2017. 6. 11.

 1. GTK+ 란?

GTK+는 C로 이루어졌지만, 클래스의 개념과 Callback 함수 (함수에 대한 포인터)를 갖춘 객체지향적 특성을 갖춘 기술이라고 할 수 있습니다.

그럼 GTK+는 차라리 C++ 용으로 나오는 게 낫지 않았을까 라고 생각하실 수 있습니다. 

이러한 생각이 많았는 지, GTK+는 C++ 스타일로도 나오게 됩니다. 그것을 GTK-- 또는 GTKMM이라고 합니다.

정확한 GTK+ 개발 문서는 https://developer.gnome.org/gtkmm-tutorial/stable/index.html.en 참고하시길 바랍니다.


그리고, 아시는 분들은 아시겠지만, C 스타일의 GTK+로도 클래스화가 가능합니다. 이 말은 C++에서도 GTK+를 사용할 수 있다는 말입니다. C++에서 사용하려면 클래스화할 수 있어야 하는 건 당연한 이야기겠죠? 그럼 어떻게 해야 가능할까요?


이 방법은 먼저 정답을 말하자면, 해당 G_CALLBACK 함수를 static화하여 사용하면 됩니다. 자세한 설명은 추후에 관련 포스팅할 때 정리하도록 하겠습니다.


 2. GTK+에 필요한 라이브러리. 

    • Glib
    • Pango
    • ATK
    • GDK
    • GdkPixbuf
    • Cairo

 3. GTK+ 기본 컴파일 방법 

다음의 예로 GTK+를 컴파일하는 방법을 설명하겠습니다.

gcc -Wall -g helloworld.c -o helloworld `pkg-config –cflags gtk+-2.0` || `pkg-config –libs

리눅스에서 컴파일을 한번이라도 해보신 분이라면 위의 예를 이해하는 게 어렵지 않으실 겁니다.


'pkg-config –cflags gtk+-2.0' 컴파일러가 볼 수 있는 Include 디렉토리를 출력한다.

'pkg-config –libs gtk+-2.0' 라이브러리 리스트.

`pkg-config –cflags –libs gtk+-2.0` 둘을 더하여 사용할 수 있음.


위의 플래그를 추가하지 않는다면, gtk.h가 포함되지 않았다는 에러 메시지를 보시게 될 것입니다.


 4. GTK+ Makefile 예제 

제가 GTK+를 이용하여 프로그래밍하면서 가장 어려웠던 점은 Makefile을 작성할 때였습니다. 물론 제가 Makefile를 처음 만들어 보는 것이었기 때문에 그러한 점들이 복합적으로 문제가 되었겠지만, GTK+를 이용할 때 필요한 플래그를 어디에 넣어야 할 지 고민도 되었고, 구글링도 여러 곳을 검색하면서 해결하려고 노력했던 때가 기억에 남습니다.


그러므로, 이 포스팅을 보시는 분들은 좀 더 쉽게 GTK+를 이용하실 수 있도록 정리하려고 합니다.


먼저, 예제를 적어 보았습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.SUFFIXES: .cpp.o
TARGET=mygtk
GTKFLAGS1=`pkg-config --cflags gtk+-2.0`
GTKFLAGS2=`pkg-config --libs gtk+-2.0`
CXXFLAGS=-Wall -O2
OBJECTS= main.o Hello.o HelloUi.o
SRCS=$(OBJECTS:.o=.cpp)
DEPEND_FILE=depend_file
CXX=g++
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(GTKFLAGS2)
-include $(DEPEND_FILE)
main.o: main.cpp
$(CXX) $(CXXFLAGS) $(GTKFLAGS1) -o $@ -c main.cpp
Hello.o: Hello.cpp
$(CXX) $(CXXFLAGS) $(GTKFLAGS1) -o $@ -c Hello.cpp
HelloUi.o: HelloUi.cpp
$(CXX) $(CXXFLAGS) $(GTKFLAGS1) -o $@ -c HelloUi.cpp
dep:
g++ -MM $(SRCS) $(GTKFLAGS) > $(DEPEND_FILE)
clean:
/bin/rm -f $(TARGET) *.o $(DEPEND_FILE)
cs

Makefile 작성법에 대해서는 이 포스팅에 정리하기는 힘들 것 같습니다. Makefile 작성법만 해도 엄청난 분량의 pdf 내용이 나오니깐 말이죠..

혹시나, 차후에 Makefile에 대해서도 정리할 수 있었으면 좋겠습니다.


여튼, 위의 Makefile 작성 예제만 보셔도 GTK+를 위한 makefile을 작성하는 데에는 큰 어려움이 없으실 것입니다.

(또한, 위의 방법이 고수분들께서 보신다면, 한숨이 나오실 수도 있을 법한 입문자의 작성 예제입니다. 더 나은 예제로 만들어갈 수 있도록 도움을 주시고자 하신다면, 댓글 부탁드립니다.!!)


GTK+를 위한 설명은 크게 3, 4 줄을 설명드릴 수 있을 것 같습니다. 3에서 말한 것과 같이 GTK+를 컴파일 하기 위한 플래그라고 생각하시면 될 것 같습니다. 이러한 내용을 10 ~ 12줄 처럼 컴파일할 때, 플래그를 적용해준다면 GTK+ 컴파일을 하는 데에는 큰 어려움이 없으실 것이라고 생각합니다.


추가 설명이 필요하시면 댓글 남겨주시기 바랍니다.


이상, GTK+ 소개에 대한 포스팅을 마치겠습니다. 다음 포스팅은 GTK+ 기본 예제를 바탕으로 GTK+의 기본적인 창 띄우기와 같은 실행 예제를 소개하겠습니다.


참고 자료 출처:

https://developer.gnome.org/gtkmm-tutorial/stable/index.html.en


제 글이 도움이 되셨거나 공감이 되시는 부분이 있으셨다면, 밑에 있는 공감 버튼 한 번씩 꾸욱 눌러주시면 감사하겠습니다.


공감 버튼은 저에게 큰 도움이 됩니다. 감사합니다.

댓글