1.环境设置
1.1Eclipse
1.1.1下载安装JDK。
下载安装eclipse cpp。
1.1.2 使用GNU工具集
1.1.2.1下载安装MinGW,Cygwin,两者选一。
MinGW,Cygwin都是windows下GNU工具集。MinGW将GNU的api转为win的api,cywin相当于一个linux的拟器。
MinGW,MinGW有两个选择,一个是原始版的MinGW,自包含32位版本。另一个版本是Mingw w64,是从MinGW中分离出来的,包含64位。
1.1.2.2如果需要使用GTK+开发GUI,还需下载安装MSYS2
pacman -Syu //更新整个msys系统
pacman -S mingw-w64-x86_64-toolchain //安装工具链
在MSYS2中通过以下命令安装依赖包:
添加GTK 3.0包
pacman -S mingw-w64-x86_64-gtk3
添加GTK可视化工编辑工具glade,生成通用XML
pacman -S mingw-w64-x86_64-glade
帮组文档:
pacman -S mingw-w64-x86_64-devhelp
如果使用python 3进行开发:pacman -S mingw-w64-x86_64-python3-gobject
如果使用python 2进行开发:pacman -S mingw-w64-x86_64-python2-gobject
编译工具toolchain和一般工具base-devel:
pacman -S mingw-w64-x86_64-toolchain base-devel
1.1.4.使用eclipse新建c或c++项目,Toolchains选择MinGW或者Cygwin。
以开发GTK+程序为例,需要在eclipse中添加相应的compiler和linker:
1.1.4.1打开MSYS目录下的mingw64.exe.
1.1.4.2在eclipse添加includes和libraries
1.1.4.2.1增加头文件
在eclipse项目右键->properties->C/C++ Build -> GCC C/C++ Compiler -> Includes中的include paths中添加以下命令的结果。
pkg-config gtk+-3.0 --cflags > d:/includes.txt
结果为:
-mms-bitfields -pthread -mms-bitfields -ID:/lib/msys64/mingw64/include/gtk-3.0 -ID:/lib/msys64/mingw64/include/cairo -ID:/lib/msys64/mingw64/include -ID:/lib/msys64/mingw64/include/pango-1.0 -ID:/lib/msys64/mingw64/include/atk-1.0 -ID:/lib/msys64/mingw64/include/cairo -ID:/lib/msys64/mingw64/include/pixman-1 -ID:/lib/msys64/mingw64/include -ID:/lib/msys64/mingw64/include/freetype2 -ID:/lib/msys64/mingw64/include/libpng16 -ID:/lib/msys64/mingw64/include/harfbuzz -ID:/lib/msys64/mingw64/include/glib-2.0 -ID:/lib/msys64/mingw64/lib/glib-2.0/include -ID:/lib/msys64/mingw64/include -ID:/lib/msys64/mingw64/include/freetype2 -ID:/lib/msys64/mingw64/include -ID:/lib/msys64/mingw64/include/harfbuzz -ID:/lib/msys64/mingw64/include/libpng16 -ID:/lib/msys64/mingw64/include/gdk-pixbuf-2.0 -ID:/lib/msys64/mingw64/include/libpng16 -ID:/lib/msys64/mingw64/include/glib-2.0 -ID:/lib/msys64/mingw64/lib/glib-2.0/include -ID:/lib/msys64/mingw64/include
需要添加的结果为:
D:/lib/msys64/mingw64/include/gtk-3.0
D:/lib/msys64/mingw64/include/gdk-pixbuf-2.0
D:/lib/msys64/mingw64/include/cairo
D:/lib/msys64/mingw64/include/libpng16
D:/lib/msys64/mingw64/include/glib-2.0
D:/lib/msys64/mingw64/lib/glib-2.0/include
D:/lib/msys64/mingw64/include/atk-1.0
D:/lib/msys64/mingw64/include/harfbuzz
D:/lib/msys64/mingw64/include/pixman-1
D:/lib/msys64/mingw64/include/freetype2
D:/lib/msys64/mingw64/include/pango-1.0
1.1.4.2.1增加链接库
在eclipse项目右键->properties->C/C++ Build -> MinGW C++ Linker -> libraries中的libraries中添加以下命令的结果。
pkg-config gtk+-3.0 --libs
结果为:
-LD:/lib/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
需要添加的结果为:
gtk-3
gdk-3
gdi32
imm32
shell32
ole32
uuid
winmm
dwmapi
setupapi
cfgmgr32
z
pangowin32-1.0
pangocairo-1.0
pango-1.0
atk-1.0
cairo-gobject
cairo
gdk_pixbuf-2.0
gio-2.0
gobject-2.0
glib-2.0
intl
libraries search path 中添加mingw64库,D:/lib/msys64/mingw64/lib
1.1.4.2.3 Command line pattern
某些情况(不明)在 GCC C/C++ Compiler和MinGW C Linker 中的Command line pattern中将${INPUTS} 调到${COMMAND}后面;
(如:${COMMAND} ${INPUTS} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT})
1.1.5.新建 CMake項目
eclipse photon 开始支持直接创建CMake项目。
1.1.5.1下载Ninja
因为eclipse进行构建时,默认调用了以下命令,暂时不知道哪里可以修改,所以需要下载使用Ninja。
cmake -G Ninja
Ninja是一个类似make的编译构建工具。下载Ninja,他只有一个exe文件,在系统环境变量中增加ninja.exe。
1.1.5.2下载CMake
CMake是一个简化创建makefile和build.ninja等编译构建文件的工具。下载CMake,并且在系统环境变量中增加CMake下的bin目录。
1.1.5.3建立CMake项目:
1.1.5.4编译工程
1.1.6. CMake
接下来编写CMakeLists.txt文件,该文件放在和src,include的同级目录,实际方哪里都可以,只要里面编写的路径能够正确指向就好了。CMakeLists.txt文件,如下所示:
#1.cmake verson,指定cmake版本
cmake_minimum_required(VERSION 3.2)
#2.project name,指定项目的名称,一般和项目的文件夹名称对应
PROJECT(test_sqrt)
#3.head file path,头文件目录
INCLUDE_DIRECTORIES(include )
#4.source directory,源文件目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
SET(TEST_MATH ${DIR_SRCS})
#6.add executable file,添加要编译的可执行文件
ADD_EXECUTABLE(${PROJECT_NAME} ${TEST_MATH})
#7.add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称
TARGET_LINK_LIBRARIES(${PROJECT_NAME} m)
CMakeLists.txt主要包含以上的7个步骤,具体的意义,请阅读相应的注释,或参考官方文档。
1.2 Visual Studio Code
1.2.1.下载安装visual studio code。
安装vsc后,需要安装C/C++插件,和cmake插件。
点开扩展后,输入c++,后出现插件,然后选择安装。同理安装cmake。
1.2.2.安装Mingw w64
下载并安装Mingw w64。并且在环境变量中添加mingw目录下的bin目录。
1.2.3.添加一个类main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
for(int i = 0;i < 100;i++)
{
cout << i << endl;
}
return 0;
}
1.2.4.生成tasks.json
在vsc中按ctrl + shift + p,然后输入tasks: cofigure task -> "使用模板创建tasks.json" -> “Others运行任意外部命令的示例”,就会得到文件tasks.json。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
其中如果使用gcc,则commad给为g++。并添加运行g++时要使用的参数到args。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "g++"
"args": [
"-g", "main.cpp"
]
}
]
}
1.2.5.编译
按ctrl + shift + B -> ”没有找到要运行的生成任务。配置生成任务... “ -> "echo"。
会在tasks.json中生成
"group": {
"kind": "build",
"isDefault": true
},
最后生成的task.json为
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "g++",
"group": {
"kind": "build",
"isDefault": true
},
"args": [
"-g", "main.cpp"
]
}
]
}
再按ctrl + shift + B,会生成a.exe在工作目录中。
1.3.自定义图标
一般来说生成exe文件之后,都想把图标编程自定义的样子。
1.3.1 在win32编程中生成rc文件
格式: nameID BITMAP filename
每一行第一个是资源的id、第二个是文件格式、第三个是文件所在路径。并且可以定义多行,每一行是一种分辨率的ico图标:
1 ICON "icon.ico"
3056 ICON "icon.ico"
1.3.2编译rc文件
使用mingw的windres命令进行编译,格式为:
windres -o [输出文件] [输入文件]
windres -o icon.o ../src/icon.rc
在eclipse中Build Steps -> rPre-bulid steps -> Commond中可以进行设置。
1.3.3链接编译后的rc文件
使用g++编译的时候进行链接:
g++ -o waf.exe "src\\waf.o" icon.o
在eclipse中增加, C/C++ Build -> Settings -> ToolSettings -> MinGW C++ Linker -> other中增加编译后的icon.o(注:要增加绝对路径,否者重新build的时候可能会出错)。