IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Windows配置Gtkmm开发环境(with codeblocks) -> 正文阅读

[C++知识库]Windows配置Gtkmm开发环境(with codeblocks)

写在前面

最近腾出时间来学习一下Gtkmm(一称Gtk–)这一经典的跨平台GUI集成软件,也当做C++的一个复习和应用。

既然是跨平台,当然就要在主流平台中进行环境的配置,在Mac OS上配置相对简单,直接使用brew包管理器进行安装即可,就是在CLion中写CMakeLists文件花了点时间研究(之前的文章有所提及,在此不赘述),其实主要还是pkg-config的应用。但是在Windows中进行配置就没有那么容易了,不仅需要msys2的类Linux环境, 还需要学习一下Code::Blocks这一经典的C++开发IDE(我咋Windows上开发使用surface go,性能和磁盘空间都不是太优,只能选择轻量级的IDE)。

开发环境:

Windows11(dev预览版)

MSYS2+Code::Blocks

MSYS2的安装/配置

之前我也想过在wsl中进行开发,但是后来为什么选择msys2呢?是因为gtkmm的安装配置文档1中明确指出了虽然在Windows下可用,但是最好还是用MSYS2环境,MSYS2环境其实就是模拟了一个Linux的环境,采用pacman作为包管理,C/C++编译器使用mingw的gcc,具体的安装以及配置如下。

进入中科大镜像站(mirrors.ustc.edu.cn),搜索msys2,从这里下载msys2的话速度会快很多,下载64bit的最新版安装包即可。

安装的话比较简单,一路下一步就好,就是随后需要添加环境变量以及换国内镜像,然后安装所需的软件包。下面分别介绍。

添加环境变量

将如下路径添加到系统的环境变量中(Path变量):

  1. C:\msys64\mingw64\bin\;
  2. C:\msys64\usr\bin\;

更换国内镜像

这里参考了中科大镜像的帮助界面2,不过我发现换不换源速度区别不是很大。

在这之前需要使用一个编辑器,我下载了vim,用来更改下面的镜像站点配置文件,安装命令如下:

pacman -S vim

之后进行文件的更改:

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:

Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加

Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64

编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加

Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch

编辑 /etc/pacman.d/mirrorlist.ucrt64 ,在文件开头添加

Server = http://mirrors.ustc.edu.cn/msys2/mingw/ucrt64

然后执行 pacman -Sy 刷新软件包数据即可。

安装必需软件包

这里首先需要安装gcc,

pacman -S mingw-w64-x86_64-gcc

然后安装gtkmm-4.0

pacman -S mingw-w64-x86_64-gtkmm4

pkg-config:

pacman -S pkg-config

可选的软件包:

glade(相当于qt-designer,是一个可视化的gui开发界面)

pacman -S mingw-w64-x86_64-glade

完成上述配置之后,还需要添加msys2的环境变量,因为这里的msys2相当于一个简易版的Linux环境,所以直接添加下面两行到.bashrc文件(第二行可能需要):

export PATH="/c/msys64/mingw64/bin/:$PATH"
export PKG_CONFIG_PATH="/mingw64/lib/pkgconfig:/mingw64/share/pkgconfig:$PKG_CONFIG_PATH"

完成上面的安装以及配置后,应该就可以编译文件了,一般的编译命令是:

g++ main.cc test.h test.cc -o main -std=c++17 `pkg-config gtkmm-4.0 --cflags --libs`

如果你能用上面的命令成功编译一个gtkmm程序,那说明你的环境已经配置好了。

下面看看如何把上面的命令放在Code::Blocks中。

Code::Blocks配置

完成上述的操作后,就可以开始配置IDE了,虽然C::B是开源的跨平台编辑器,但是我还是觉得其自动补全等功能不太好用😂, 将就着使使了,还是CLion舒服。

进入settings->compiler...,可以看到如下界面

1

① 首先是C++标准,这里选择C++ 17 ISO C++即可。

② 这里需要填写编译选项参数,这里需要注意的是,在windows自带的命令行工具cmd/powershell中,并不能正确使用pkg-config命令,所以只能在msys2命令行下使用pkg-config gtkmm-4.0 --cflags查看,这里我为了方便直接贴出来了,将下面的内容复制到②的框框里面即可。

-IC:/msys64/mingw64/include/gtkmm-4.0 -IC:/msys64/mingw64/lib/gtkmm-4.0/include -IC:/msys64/mingw64/include/giomm-2.68 -IC:/msys64/mingw64/lib/giomm-2.68/include -IC:/msys64/mingw64/include -IC:/msys64/mingw64/include/glib-2.0 -IC:/msys64/mingw64/lib/glib-2.0/include -mms-bitfields -IC:/msys64/mingw64/include/glibmm-2.68 -IC:/msys64/mingw64/lib/glibmm-2.68/include -IC:/msys64/mingw64/include/sigc++-3.0 -IC:/msys64/mingw64/lib/sigc++-3.0/include -IC:/msys64/mingw64/include/gtk-4.0 -IC:/msys64/mingw64/include/pango-1.0 -IC:/msys64/mingw64/include/harfbuzz -IC:/msys64/mingw64/include/freetype2 -IC:/msys64/mingw64/include/libpng16 -mms-bitfields -IC:/msys64/mingw64/include/fribidi -IC:/msys64/mingw64/include/cairo -IC:/msys64/mingw64/include/lzo -IC:/msys64/mingw64/include/pixman-1 -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/include/gdk-pixbuf-2.0 -mms-bitfields -mms-bitfields -IC:/msys64/mingw64/include/graphene-1.0 -IC:/msys64/mingw64/lib/graphene-1.0/include -mfpmath=sse -msse -msse2 -mms-bitfields -IC:/msys64/mingw64/include/cairomm-1.16 -IC:/msys64/mingw64/lib/cairomm-1.16/include -IC:/msys64/mingw64/include/pangomm-2.48 -IC:/msys64/mingw64/lib/pangomm-2.48/include -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -pthread -mms-bitfields

③ 同理,这里是链接器选项,使用命令pkg-config gtkmm-4.0 --libs查看,然后复制进③,内容如下:

-LC:/msys64/mingw64/lib -lgtkmm-4.0 -lgtk-4 -lpangowin32-1.0 -lcairo-gobject -lvulkan -lgraphene-1.0 -lpangomm-2.48 -lgiomm-2.68 -lgio-2.0 -lglibmm-2.68 -lcairomm-1.16 -lsigc-3.0 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl

最后就可以新建项目了,然后使用Ctrl+F9编译,F9编译并运行,就可以愉快写程序了。

一个简单的例子(hello world)

采用官方文档3中的hello world的例子,可以 编写如下程序

hw.h:

#ifndef GTKMM_EXAMPLE_HELLOWORLD_H
#define GTKMM_EXAMPLE_HELLOWORLD_H
#include <gtkmm/button.h>
#include <gtkmm/window.h>
class HelloWorld : public Gtk::Window
{
public:
HelloWorld();
~HelloWorld() override;
protected:
//Signal handlers:
void on_button_clicked();
//Member widgets:
Gtk::Button m_button;
};
#endif // GTKMM_EXAMPLE_HELLOWORLD_H

hw.cc:

#include "hw.h"
#include <iostream>
HelloWorld::HelloWorld()
: m_button("Hello World~") // creates a new button with label "Hello World".
{
// Sets the margin around the button.
m_button.set_margin(10);
// When the button receives the "clicked" signal, it will call the
// on_button_clicked() method defined below.
m_button.signal_clicked().connect(sigc::mem_fun(*this,
&HelloWorld::on_button_clicked));
// This packs the button into the Window (a container).
set_child(m_button);
}
HelloWorld::~HelloWorld()
{
}
void HelloWorld::on_button_clicked()
{
std::cout << "Hello World" << std::endl;
}

main.cc:

#include "hw.h"
#include <gtkmm/application.h>
int main(int argc, char* argv[])
{
auto app = Gtk::Application::create("org.gtkmm.example");
//Shows the window and returns when it is closed.
return app->make_window_and_run<HelloWorld>(argc, argv);
}

运行结果如下:

2

注意 :这里如果需要取消程序运行时侯出现的命令行窗口,则需要在链接器选项中添加-mwindows命令,但是一般在调试程序的时候有一个黑框框还是很有必要的。

主要参考


  1. gtkmm on Microsoft Windows; ??

  2. MSYS2 源使用帮助 — USTC Mirror Help 文档; ??

  3. gtkmm4 程序设计 (gnome.org); ??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:15:53  更:2021-07-24 11:16:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 13:00:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码