SW
[GTK+ 3] Windows에서 GTK+ 개발하기 - 0. GTK+ 설치 본문
2022년 기준 현재는 모종의 이유로 정상작동하지 않는 경우가 있는 것으로 보입니다. 이 글은 참고용으로만 활용해 주시기 바랍니다.
GTK+는 다양한 플랫폼을 지원하는 위젯 툴킷입니다. 하지만, 모든 매뉴얼과 튜토리얼은 리눅스를 기준으로 설명하고 있고, Glade와 같은 프로그램조차 윈도우에는 구버전만을 지원하는 경우가 많습니다. 그래서 이 포스트에서는 윈도우에서 GTK+ 참조 매뉴얼의 튜토리얼을 연습해 보면서 윈도우에서의 GTK+ 개발에 대해 알아보겠습니다.
※ 이 글은 제가 경험해 본 것을 기준으로 설명하고 있으며, 일부 틀린 설명이 존재할 수도 있습니다.
※ 이 글은 비주얼 스튜디오 2015/2017/2019 중 하나 이상 설치되어 있다고 가정합니다.
GTK+를 윈도우에 설치하는 방법은 2가지가 있습니다. MSYS를 이용하는 방법과 vcpkg를 이용하는 방법이 있는데, 저는 비주얼 스튜디오에서 GTK+개발을 할 생각이고, 이를 위해서는 vcpkg를 이용하는 편이 더 좋을 것이라고 판단하여 그 방법을 소개하도록 하겠습니다.
아래는 GTK+를 vcpkg를 이용해 설치하는 방법을 소개하는 사이트입니다.
https://www.gtk.org/docs/installations/windows/#using-gtk-from-vcpkg-packages
The GTK Project - A free and open-source cross-platform widget toolkit
GTK is a free and open-source cross-platform widget toolkit for creating graphical user interfaces.
www.gtk.org
CMD 창을 연 뒤 먼저 원하는 디렉터리로 이동합니다. 이후, 위 사이트에서 설명하는대로 아래 명령어를 차례대로 입력하고 실행합니다.
git clone https://github.com/Microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
vcpkg install gtk:x64-windows
만약 git이 없다면, 먼저 아래 사이트를 참고하여 git을 설치하시면 됩니다.
https://git-scm.com/downloads
Git - Downloads
Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific
git-scm.com
그리고 vcpkg를 사용하는 과정에서 오류가 발생할 수 있습니다. 그럴 경우 대부분은 비주얼 스튜디오의 언어 팩이 영어 없이 한국어만 설치되어 있는 경우일 수 있습니다. Visual Studio Installer를 실행하여 영어 언어 팩을 설치해 주시면 됩니다.
vcpkg를 통한 설치가 끝났다면, 일단 절반은 끝났습니다.
이제 GTK+를 사용할 수 있는지 확인해 보겠습니다.
Visual Studio를 실행하고, C++ 빈 프로젝트를 만들고, 소스 파일을 우클릭하여 main.c를 추가해 주시고 아래 코드를 입력한 후 실행해 봅시다.
#include <gtk/gtk.h>
static void activate(GtkApplication* app,
gpointer user_data) {
//Declare
GtkWidget* window;
//Initialize
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "ExampleOnWindows");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
//Show
gtk_widget_show_all(window);
}
int main(int argc, char** argv) {
GtkApplication* app;
int status;
app = gtk_application_new("org.gtk.example",
G_APPLICATION_FLAGS_NONE);
//Connect the Function activate to gsignal "activate"
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
//Run
status = g_application_run(G_APPLICATION(app), argc, argv);
//Destruct
g_object_unref(app);
//Return
return status;
}
실행 시 주의할 점이 있다면, 빌드 옵션을 'Debug'대신 'Release'로 하시고 'x86' 대신 'x64'를 무조건 선택하셔야 합니다.
x86에 대한 GTK+라이브러리를 설치한 적이 없기 때문에, MSVC가 gtk.h 파일을 찾을 수 없어 컴파일 에러가 일어납니다. 또한, Debug로 할 경우 ffiw64.c의 170~180번째 줄 사이에서 오류가 발생합니다.
(이 오류는 런타임(vcpkg로 설치한 GTK+)은 Release 옵션으로 컴파일 되었는데 그 런타임에서 실행되어야 하는 프로그램(여러분들의 프로그램)은 Debug 옵션으로 컴파일 되어 일부 다른 부분이 생겨서 그런 듯 합니다. Debug옵션으로 컴파일 할 경우 같은 코드의 Release와 기계어 번역 결과물이 다릅니다.)
실행해 보시면 아래와 같은 모습을 보실 수 있습니다.

혹시 이상한 점을 찾으셨나요? 최소화, 최대화, 종료 버튼의 아이콘이 깨져 있습니다. 이는 vcpkg에서 아이콘까지 설치되지 않아 일어나는 문제입니다. 저는 이 문제를 Gedit라는 프로그램에서 아이콘을 가져와 해결했습니다. 제가 아래 링크에 올린 파일을 아래의 경로에 붙여넣으시면 됩니다.
https://drive.google.com/file/d/1KMLo8j-rAVWLASrebfra1B2xFTb6VY5N/view?usp=sharing
Adwaita.zip
drive.google.com
(매번 프로젝트를 만들 때마다 붙여넣어야 합니다.)
(프로젝트 경로)\x64\Release\share\icons
share와 icons 폴더는 기본으로 없으므로 새로 만드셔야 합니다.
압축을 Adwaita 폴더에 풀고 icons폴더에 Adwaita폴더를 복사-붙여넣기 하시면 됩니다.
이후, 다시 실행해 보면 문제가 해결되어 있는 것을 확인하실 수 있습니다.

이로써 윈도우에서 GTK+ 개발환경 구성이 완료되었습니다.
이로써 설치는 완료했습니다. 이번에 테스트용으로 썼던 소스코드의 설명과 기초 설명은 다음 포스트에서 하도록 하겠습니다.
★번외 1. GTK+로 프로그램 만들면서 Windows처럼 창을 만들 수 없나?
GTK+로 만든 프로그램의 기본 테마는 Adwaita로, 확실히 윈도우10의 디자인과는 괴리가 있습니다. 이는 애초에 Adwaita테마가 GNOME 데스크탑 환경에 어울리게 설계된 것이기 때문으로, 윈도우에서 사용할 때에는 많이 부자연스럽습니다.

그래서 GTK+ 프로그램에서 Windows 테마를 사용하게 만들면 윈도우에서 실행할 때 보다 자연스럽습니다.
GTK+에서 윈도우 테마를 사용하는 방법은 다음과 같습니다.
아래 링크에서 Window 10 테마를 다운로드받고, 압축을 푼 후, 폴더의 이름을 Windows 10으로 합니다.
https://www.gnome-look.org/p/1013482/
(프로젝트 경로)\x64\Release\share\themes
그리고, 위의 경로에 압축을 푼 폴더를 붙여넣습니다.
(프로젝트 경로)\x64\Release\etc\gtk-3.0
이후, 위의 경로에 settings.ini를 만들어 아래의 내용을 붙여넣고 저장한 후 프로그램을 재실행하면
[Settings]
gtk-theme-name=Windows 10
아래와 같은 화면을 보실 수 있습니다.

★번외 2. HiDPI 때문에 뿌옇게보인다면?
노트북처럼 해상도는 PC와 같지만, 화면이 작은 경우 배율 설정이 1.25~1.5로 되어있는 경우가 있는데, GTK+로 작성한 프로그램은 HiDPI의 지원 방식이 윈도우와 달라 흐려져보이는 경우가 있습니다. 그럴 경우, 실행 파일의 [속성]으로 들어가서 [호환성]-[높은 DPI 설정 변경]-[높은 DPI 조정 재정의 체크]를 하시면 깨지지 않습니다.
(MSYS2로 개발할 경우 높은 확률로 이런 현상이 발생합니다. 하지만, 저는 vcpkg를 쓰면서 뿌옇게 된 적은 없었습니다.)