Nim에서 처음으로 GUI
왜 님
네이밍, HP의 분위기, 언어 기술 등이 전체적으로 좋아.
Go, Rust 등도 조금만 만졌습니다만, 이엔의 비교 기사등도 포함해 Nim 좋다-라고 생각하고 있습니다.
Nim을 실행할 때까지
Windows
: 10
nim
: 0.18.0
MinGW
: 6.3.0
여기까지는 통상의 Nim의 개발 환경입니다. 이 페이지에 따라 쉽게 구성할 수 있습니다.
h tps://에 m-ㅁ g. rg/인 s단 l_우동 ws. HTML
GUI를 만드는 환경
사용할 라이브러리: IUP
Nim에서 GUI를 만들려면 IUP 이라는 GUI 라이브러리를 사용합니다.
이 IUP는 Nim에 한정된 GUI 라이브러리가 아니고, 원래 Lua 등, C를 중심으로 한 빌드 환경에서 멀티 플랫폼으로 네이티브 GUI를 개발하기 위한 라이브러리인 것 같습니다.
일단 Nim을 빌드하면 알겠지만, C에 트랜스파일(이라고 말해도 좋을까) 되고 나서 빌드되기 때문에, IUP를 사용할 수 있다고 하는 것이군요.
※더 자세한 사람, 가르쳐 주세요. . .
IUP를 가져다
다음 위치에 IUP 라이브러리가 있습니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/
이 시점에서 최신 버전인 3.24
를 선택합니다.
Windows64bit+MinGW에 해당하는 IUP 라이브러리를 다운로드합니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/3. . 지 p / 도 w 응 아 d
다운로드한 ZIP을 해동하면 다음과 같은 내용이 됩니다.
.a
파일은 링커가 사용하는 바이너리이므로, 이것을 MinGW(gcc)에 건네주면, 사용할 수 있을 것 같네요.
Nim에서 IUP를 호출할 수 있도록 허용
Nim 코드 내에서 IUP 라이브러리를 호출해야합니다.
그것에는 공식 IUP 래퍼가 있기 때문에 그것을 사용합니다.
README에 따라 다음 명령으로 설치합니다.
$ nimble install iup
이것으로 환경 준비가 완료되었습니다. 드디어 프로그램을 만듭니다.
IUP 프로그램
마찬가지로 IUP 래퍼의 Github에 샘플이 있으므로 그것을 사용해 보겠습니다.
menu.nimimport iup
discard iup.open(nil, nil)
var fileItemLoad = iup.item("Load", "")
var fileItemSave = iup.item("Save", "")
var fileItemClose = iup.item("Close", "")
var fileMenu = iup.menu(fileItemLoad, fileItemSave, fileItemClose, nil)
var mainMenu = iup.menu(iup.subMenu("File", fileMenu), nil)
discard iup.setHandle("mainMenu", mainMenu)
var dlg = iup.dialog(nil)
iup.setAttribute(dlg, "TITLE", "iupTabs")
iup.setAttribute(dlg, "SIZE", "200x100")
iup.setAttribute(dlg, "MENU", "mainMenu")
discard iup.showXY(dlg, IUP_CENTER, IUP_CENTER)
discard iup.mainLoop()
iup.close()
IUP 라이브러리를 이번에는 프로젝트 폴더의 iup 폴더에 넣습니다.
다음과 같은 구성이 됩니다.
그럼 빌드를 해보자.
$ nim c -d:release --dynlibOverride:iup -L:iup/libiup.a -L:iup/libiupcd.a -L:iup/libiupim.a -L:-lgdi32 -L:-luser32 -L:-lcomdlg32 -L:-lcomctl32 -L:-lole32 -L:-luuid menu.nim
이것은 Nim에서 C로 트랜스파일된 뒤, 다음과 같은 컴파일이 내부에서 행해지고 있습니다.
gcc.exe -o C:\○○○\menu.exe C:\○○○\nimcache\menu.o C:\○○○\nimcache\stdlib_system.o C:\○○○\nimcache\stdlib_iup.o iup/libiup.a iup/libiupcd.a iup/libiupim.a -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lole32 -luuid
32라고 붙어 있는 것은 전부 Win32의 라이브러리군요. 활기차지만 ...
gdi32
: 화면 그리기user32
: 사용자 주변?comdlg32
: 공통 대화상자comctl32
: 공통 컨트롤(버튼이라든가?)ole32
: 링커? ( htps : // 그럼.ぃきぺぢ아. 오 rg / ぃき / 오 b ぇ ct_ ぃ き ん g_ an d_ 에 m 베 ぢ g )uuid
: UUID (무엇에 사용하고 있습니까?)
※자세한 사람, 가르쳐 주세요. . .
우선 이것으로 exe를 할 수 있다고 생각하므로 실행해 봅시다.
:*:・。,☆゚'・:*:・。,ヽ(・NIM・)人(・IUP・)ノ ,。・:*:・゚'☆,。・:*:
했어!
앞으로 하고 싶은 일
Windows
: 10
nim
: 0.18.0
MinGW
: 6.3.0
여기까지는 통상의 Nim의 개발 환경입니다. 이 페이지에 따라 쉽게 구성할 수 있습니다.
h tps://에 m-ㅁ g. rg/인 s단 l_우동 ws. HTML
GUI를 만드는 환경
사용할 라이브러리: IUP
Nim에서 GUI를 만들려면 IUP 이라는 GUI 라이브러리를 사용합니다.
이 IUP는 Nim에 한정된 GUI 라이브러리가 아니고, 원래 Lua 등, C를 중심으로 한 빌드 환경에서 멀티 플랫폼으로 네이티브 GUI를 개발하기 위한 라이브러리인 것 같습니다.
일단 Nim을 빌드하면 알겠지만, C에 트랜스파일(이라고 말해도 좋을까) 되고 나서 빌드되기 때문에, IUP를 사용할 수 있다고 하는 것이군요.
※더 자세한 사람, 가르쳐 주세요. . .
IUP를 가져다
다음 위치에 IUP 라이브러리가 있습니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/
이 시점에서 최신 버전인 3.24
를 선택합니다.
Windows64bit+MinGW에 해당하는 IUP 라이브러리를 다운로드합니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/3. . 지 p / 도 w 응 아 d
다운로드한 ZIP을 해동하면 다음과 같은 내용이 됩니다.
.a
파일은 링커가 사용하는 바이너리이므로, 이것을 MinGW(gcc)에 건네주면, 사용할 수 있을 것 같네요.
Nim에서 IUP를 호출할 수 있도록 허용
Nim 코드 내에서 IUP 라이브러리를 호출해야합니다.
그것에는 공식 IUP 래퍼가 있기 때문에 그것을 사용합니다.
README에 따라 다음 명령으로 설치합니다.
$ nimble install iup
이것으로 환경 준비가 완료되었습니다. 드디어 프로그램을 만듭니다.
IUP 프로그램
마찬가지로 IUP 래퍼의 Github에 샘플이 있으므로 그것을 사용해 보겠습니다.
menu.nimimport iup
discard iup.open(nil, nil)
var fileItemLoad = iup.item("Load", "")
var fileItemSave = iup.item("Save", "")
var fileItemClose = iup.item("Close", "")
var fileMenu = iup.menu(fileItemLoad, fileItemSave, fileItemClose, nil)
var mainMenu = iup.menu(iup.subMenu("File", fileMenu), nil)
discard iup.setHandle("mainMenu", mainMenu)
var dlg = iup.dialog(nil)
iup.setAttribute(dlg, "TITLE", "iupTabs")
iup.setAttribute(dlg, "SIZE", "200x100")
iup.setAttribute(dlg, "MENU", "mainMenu")
discard iup.showXY(dlg, IUP_CENTER, IUP_CENTER)
discard iup.mainLoop()
iup.close()
IUP 라이브러리를 이번에는 프로젝트 폴더의 iup 폴더에 넣습니다.
다음과 같은 구성이 됩니다.
그럼 빌드를 해보자.
$ nim c -d:release --dynlibOverride:iup -L:iup/libiup.a -L:iup/libiupcd.a -L:iup/libiupim.a -L:-lgdi32 -L:-luser32 -L:-lcomdlg32 -L:-lcomctl32 -L:-lole32 -L:-luuid menu.nim
이것은 Nim에서 C로 트랜스파일된 뒤, 다음과 같은 컴파일이 내부에서 행해지고 있습니다.
gcc.exe -o C:\○○○\menu.exe C:\○○○\nimcache\menu.o C:\○○○\nimcache\stdlib_system.o C:\○○○\nimcache\stdlib_iup.o iup/libiup.a iup/libiupcd.a iup/libiupim.a -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lole32 -luuid
32라고 붙어 있는 것은 전부 Win32의 라이브러리군요. 활기차지만 ...
gdi32
: 화면 그리기user32
: 사용자 주변?comdlg32
: 공통 대화상자comctl32
: 공통 컨트롤(버튼이라든가?)ole32
: 링커? ( htps : // 그럼.ぃきぺぢ아. 오 rg / ぃき / 오 b ぇ ct_ ぃ き ん g_ an d_ 에 m 베 ぢ g )uuid
: UUID (무엇에 사용하고 있습니까?)
※자세한 사람, 가르쳐 주세요. . .
우선 이것으로 exe를 할 수 있다고 생각하므로 실행해 봅시다.
:*:・。,☆゚'・:*:・。,ヽ(・NIM・)人(・IUP・)ノ ,。・:*:・゚'☆,。・:*:
했어!
앞으로 하고 싶은 일
$ nimble install iup
마찬가지로 IUP 래퍼의 Github에 샘플이 있으므로 그것을 사용해 보겠습니다.
menu.nim
import iup
discard iup.open(nil, nil)
var fileItemLoad = iup.item("Load", "")
var fileItemSave = iup.item("Save", "")
var fileItemClose = iup.item("Close", "")
var fileMenu = iup.menu(fileItemLoad, fileItemSave, fileItemClose, nil)
var mainMenu = iup.menu(iup.subMenu("File", fileMenu), nil)
discard iup.setHandle("mainMenu", mainMenu)
var dlg = iup.dialog(nil)
iup.setAttribute(dlg, "TITLE", "iupTabs")
iup.setAttribute(dlg, "SIZE", "200x100")
iup.setAttribute(dlg, "MENU", "mainMenu")
discard iup.showXY(dlg, IUP_CENTER, IUP_CENTER)
discard iup.mainLoop()
iup.close()
IUP 라이브러리를 이번에는 프로젝트 폴더의 iup 폴더에 넣습니다.
다음과 같은 구성이 됩니다.
그럼 빌드를 해보자.
$ nim c -d:release --dynlibOverride:iup -L:iup/libiup.a -L:iup/libiupcd.a -L:iup/libiupim.a -L:-lgdi32 -L:-luser32 -L:-lcomdlg32 -L:-lcomctl32 -L:-lole32 -L:-luuid menu.nim
이것은 Nim에서 C로 트랜스파일된 뒤, 다음과 같은 컴파일이 내부에서 행해지고 있습니다.
gcc.exe -o C:\○○○\menu.exe C:\○○○\nimcache\menu.o C:\○○○\nimcache\stdlib_system.o C:\○○○\nimcache\stdlib_iup.o iup/libiup.a iup/libiupcd.a iup/libiupim.a -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lole32 -luuid
32라고 붙어 있는 것은 전부 Win32의 라이브러리군요. 활기차지만 ...
gdi32
: 화면 그리기user32
: 사용자 주변?comdlg32
: 공통 대화상자comctl32
: 공통 컨트롤(버튼이라든가?)ole32
: 링커? ( htps : // 그럼.ぃきぺぢ아. 오 rg / ぃき / 오 b ぇ ct_ ぃ き ん g_ an d_ 에 m 베 ぢ g )uuid
: UUID (무엇에 사용하고 있습니까?)※자세한 사람, 가르쳐 주세요. . .
우선 이것으로 exe를 할 수 있다고 생각하므로 실행해 봅시다.
:*:・。,☆゚'・:*:・。,ヽ(・NIM・)人(・IUP・)ノ ,。・:*:・゚'☆,。・:*:
했어!
앞으로 하고 싶은 일
nim.cfg
를 사용하여 명령을 줄이려면 Nim 이칸센 실제의 빌드 주위의 정보가 전혀 발견되지 않아 괴롭기 때문에, 여러분도 꼭 정보 공유해 주세요!
원래 C 빌드에 대해서도 공부해야 합니다만. . . orz
Reference
이 문제에 관하여(Nim에서 처음으로 GUI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kojisaiki/items/b2e51bd452f833711765텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)