首页 > 其他分享 >notepad++搭建gtk3.0/2.0环境_F_hawk189_新浪博客

notepad++搭建gtk3.0/2.0环境_F_hawk189_新浪博客

时间:2022-11-03 18:32:36浏览次数:100  
标签:bin bat set ++ GTK gtk notepad -- gtk3.0


准备

  下载以下内容

    ​​notepad++​

    ​​mingw​​(包含msys和gcc工具链)

    ​​gtk+bundle​​(2.x或3.x都可以,不过现在官网都是使用msys下载)

安装

  notepad++的安装就是普通安装,这里不做介绍。

  运行mingw-get-setup.exe,选择一个安装目录(这里以c:\mingw为例),然后等待其下载和安装完成。接着,运行mingw安装目录的子目录bin下的mingw-get.exe(这里是c:\mingw\bin\mingw-get.exe),选择Basic Setup,对这里所有包右键选择Mark for Installation,接着菜单选择Installation->Apply Changes,等待其下载完成(这里下载时间较长,请耐心等待)。

  解压下载的gtk+bundle到任意目录(这里以c:\gtk+为例)。

搭建

  首先,添加以下环境变量值(系统或用户变量都可,变量名均为Path,请根据自己的安装路径自行更改):

    C:\mingw\bin

    C:\mingw\msys\1.0\bin

    C:\gtk+\bin

  下面是写给不清楚环境变量设置的,清楚的请跳过:

    点击我的电脑,然后右键,选择属性,接着在左边选择高级系统设置,然后选择高级->环境变量,在用户变量或者系统变量中找到Path变量(没有就新建,变量名填Path,变量值为如下内容),选择编辑,在变量值前面添加以下内容:



C:\mingw\bin;C:\mingw\msys\1.0\bin;C:\gtk+\bin;



    然后一直确定就行。

  打开命令行,验证环境变量是否设置正确。

    输入gcc,没有显示“xxx 不是内部或外部命令,也不是可运行的程序或批处理文件。”就设置正确了,下同。

    输入pkg-config

    输入sh

  

  接着打开notepad++安装目录,然后新建目录bat,在该目录下新建一个文本文件,重命名为build_gtk+.bat,写入以下内容:

--------------------分割线----------------------------------------------------------

@echo off
rem

rem 在notepad++菜单 运行->运行->运行名称 中输入以下命令:
rem cmd /c echo $(CURRENT_DIRECTORY)>bat\current_directory&&echo $(NAME_PART)>bat\name_part&&start bat\build_gtk+.bat

rem 分别从文件中读取文件路径和文件名
for /f "delims=" %%i in (bat\current_directory) do set current_directory=%%i
for /f "delims=" %%i in (bat\name_part) do set name_part=%%i

rem disk-磁盘盘符 directory-文件目录(不含磁盘盘符)
set disk=%current_directory:~0,1%
set directory=%current_directory:~2%

rem 将文件目录中的\替换成/
set directory=%directory:\=/%

rem 合成最终目录
if %directory%==/ (
set directory=/%disk%/
) else (
set directory=/%disk%%directory%/
)

rem 定义源文件和二进制文件路径
set src_file=%directory%%name_part%.c
set bin_file=%directory%%name_part%.exe

rem 运行文件路径
set exe_file=%bin_file:/=\%
set exe_file=%disk%:%exe_file:~2%

rem sh命令行命令
set sh_cmd="gcc %src_file% -o %bin_file% `pkg-config --libs --cflags gtk+-3.0`"
rem set sh_cmd="gcc %src_file% -o %bin_file% `pkg-config --libs --cflags gtk+-3.0` D:/msys/mingw32/lib/libspice-client-glib-2.0.dll.a D:/msys/mingw32/lib/libspice-client-gtk-3.0.dll.a D:/msys/mingw32/lib/libspice-controller.dll.a D:/msys/mingw32/lib/libgobject-2.0.dll.a D:/msys/mingw32/lib/libgtk-3.dll.a"

rem 编译并运行GTK+程序
sh -c %sh_cmd%
start %exe_file%&exit

--------------------------------分割线---------------------------------------------------------

注意,若安装的是gtk2.x,将下面这行:



set sh_cmd="gcc %src_file% -o %bin_file% `pkg-config --libs --cflags gtk+-3.0`"



  改成以下内容,其实就把3.0改成2.0



set sh_cmd="gcc %src_file% -o %bin_file% `pkg-config --libs --cflags gtk+-2.0`"



 

  接着运行notepad++,菜单选择 运行->运行,在运行名称中输入以下命令:



cmd /c echo $(CURRENT_DIRECTORY)>bat\current_directory&&echo $(NAME_PART)>bat\name_part&&start bat\build_gtk+.bat



  点击保存,输入名称(这里输入Build_GTK+),然后定义快捷键,接着选择OK。

  

  最后,新建一个简单的GTK源文件,验证是否成功,以下是该源文件(注意先保存该文件,然后点击 运行->Build_GTK+ 或 使用自定义的快捷键):

--------------------------------分割线---------------------------------------------------------

#include

void on_button_clicked(GtkWidget* button, gpointer userdata)
{
    GtkWidget *dialog;

    dialog = gtk_message_dialog_new(NULL,
            GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
            GTK_MESSAGE_INFO,
            GTK_BUTTONS_OK,
            (gchar*)userdata);
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
}

int    main(int argc, char* argv[])
{
    GtkWidget *window, *button;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window),"delete_event",
            G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window),"Hello World!");
    gtk_container_set_border_width(GTK_CONTAINER(window),10);

    button=gtk_button_new_with_label("Hello World!");
    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)"你好!\n自由的世界。");
    gtk_container_add(GTK_CONTAINER(window),button);

    gtk_widget_show_all(window);
    gtk_main();
    return FALSE;
}
--------------------------------分割线---------------------------------------------------------

若弹出一个窗口,就证明成功了。

注意及经验

  1.上述所讲述一些内容,不要生搬硬套,要根据自己的情况进行更改。

  2.上述的build_gtk+.bat批处理文件,其实就实现了下面一个编译语句和运行该程序:



sh - c "gcc %src_file% -o %bin_file% `pkg-config --libs --cflags gtk+-3.0`"



  其中%src_file%为源文件,而%bin_file%为最后的程序。请注意`pkg-config --libs --cflags gtk+-3.0` ,这里使用的是反引号(数字1旁边那个),而不是单引号。

  该语句的意思和作用请看该文章 ​​`pkg-config --cflags --libs gtk+-2.0`的意思、作用​​

  3.命令行下编译gtk源文件会报错,因此必须在msys环境下编译。以上 sh -c 就是进入msys环境下,后面双引号中的内容就是需要运行的编译命令。

  4.命令行下的路径显示和msys环境下的路径显示不同,因此批处理中一些代码就是为了实现路径的转换。

标签:bin,bat,set,++,GTK,gtk,notepad,--,gtk3.0
From: https://blog.51cto.com/u_15858333/5820707

相关文章

  • C++ 通用的 toString() 函数
    1#include<iostream>2#include<string>34namespacestr_utils{56std::stringto_string(constchar*c_str){7std::cout<<"调用了......
  • c/c++访问lightdb
    /**src/test/examples/testlibpq3.c***testlibpq3.c*Testout-of-lineparametersandbinaryI/O.**Beforerunningthis,populateadatabase......
  • python 创建 dll 到 c++ 调用
    1.如果想要在c++中debug模式调试模式运行,windows下的话,需要安装时安装debug库2.安装cython3.编写pyx文件,例如demo.pyx:#cython:language_level=3cdefpub......
  • c++ 之 const 修饰成员变量、成员函数
     const修饰成员变量、成员函数结论:1、非const成员函数可以调用const成员函数,const成员函数不能调用非const成员函数。2、非const成员函数、const成员函数可以任意访问......
  • C++浅拷贝与深拷贝
    ​目录 前言一、区别二、浅拷贝1.简单描述2.代码实例三.深拷贝1.简单描述2.代码实例 四.完整代码五.运行结果总结  前言C++中有两种拷贝:深拷贝和浅......
  • C++ 反射机制
    前言反射的概念:指程序在运行时,访问、检测和修改它本身状态或行为的一种能力。wikipedia简单的来说,就是一种自描述和自控制的能力。如果联想到镜子,就可以很好的理解,你能通......
  • notepad++下载
    参考:notepad++安装教程_绛橘色de日落的博客-CSDN博客_notepad++安装 1.下载这篇文章的最后有安装包,也有详细教程: notepad++安装教程_绛橘色de日落的博客-CSDN博......
  • C/C++ 常识
    多态分为静态多态和动态多态1.静态多态:静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数就调用,没有的话就会发出警告或者......
  • 【c&c++】 cjson使用_Keil环境下Jansson解析库的使用——基于STM32F103
    前言之前我曾经写过几个JSON解析库的使用方法:Qt平台下使用QJson解析和构建JSON字符串使用cJSON库解析JSON使用cJSON库构建JSON对于嵌入式开发,比较常用的就是cJSON解析......
  • 转载文章 c++调用yolov4模型进行目标检测-使用yolov4官方接口
    前言yolo系列用c写的,在工程中的部署特别方便。4月份yolov4横空出世,之前试了试效果,精度确实有了很大的提升,AB大神nb。最近需要在C++项目中使用yolov4,尝试了opencv的调用(见......