Notepad++的本体^1^是支持使用MSVC和GCC编译的^2^,但是Notepad++插件的官方文档^3^里却只给出了MSVC的编译指南^4^。
网上也没有找到相关的讨论,所以我尝试在 Windows 上使用 MinGW,基于 GCC-8.1.0 的 posix-sjlj 线程版本^5^,研究一下怎么编译:
官方例程:
https://github.com/npp-plugins/plugindemo
语法修改:
在 StaticDialog.cpp
文件中,找到这一行:
cpp
std::wstring errorMsg(_T(""));
可能 MSVC 和 GCC-8.1.0 存在语法不兼容,此处改为:
cpp
std::wstring errorMsg(TEXT(""));
编译命令:
编译32位:
bash
windres -F pe-i386 NppPluginDemo.rc -o NppPluginDemo.o
windres -F pe-i386 DockingFeature/goLine.rc -o goLine.o
g++ *.o *.cpp DockingFeature/*.cpp -DUNICODE -o NppPluginDemo.dll ^
-m32 -static -shared -lshlwapi
编译64位:
bash
windres NppPluginDemo.rc -o NppPluginDemo.o
windres DockingFeature/goLine.rc -o goLine.o
g++ *.o *.cpp DockingFeature/*.cpp -DUNICODE -o NppPluginDemo.dll ^
-static -shared -lshlwapi
输出为 NppPluginDemo.dll
文件。
参数说明:
windres
:编译资源文件
g++
:编译C++文件
-F pe-i386
、-m32
:以32位模式编译(不添加则为64位)
-o NppPluginDemo.dll
:输出为 NppPluginDemo.dll
文件
-DUNICODE
:在编译源码时添加 #define UNICODE
宏
^
:bat 文件的续行符,可以将一行命令写作多行,提高可读性
-static
:静态编译
-shared
:编译为动态库
-lshlwapi
:PluginDefinition.cpp
文件中用到 PathFileExists
、PathAppend
、PathFindFileName
这3个函数,需要添加 shlwapi
库^6^。
另外,在编译时可能产生若干报错:
如果不希望产生过多干扰信息,可以加上 -Wno-write-strings
和 -Wno-conversion-null
减少报错,添加参数 -w
则不显示任何 warning。
至于具体怎么开发Notepad++的插件。。我以后再研究一下。。=_=
本文中引用的链接可在尾注中查找。