# NotepadPlugin 开发说明 > 当前插件实现的提供 Linux 层开发说明 - 引用 NotepadPluginConfig.cmake 中的说明 ```cmake # NotepadPluginConfig.cmake # 用于 Notepad-- 插件实现的 CMake 模块初级定义 # 在 Linux 中,它的布局应该如下: # /usr/lib/x86_64-linux-gnu/cmake/NotepadPlugin/NotepadPluginConfig.cmake # 在 插件开发层中,它的使用如下: # 1. 查找 NotepadPlugin 模块 # find_package(NotepadPlugin) # 2. 使用 add_notepad_plugin(<模块名称> <源代码、资源文件> [...]) # add_notepad_plugin( ...) ``` - 着手进行实现插件 > 将项目中的 src/plugin/helloworld 复制为单个项目,并使用 CMake 进行构建 ```cmake cmake_minimum_required(VERSION 3.5.1) project(template LANGUAGES CXX VERSION 0.0.1) # 1. 查找 NotepadPlugin 模块 find_package(NotepadPlugin REQUIRED) # 2. 使用 add_notepad_plugin(<模块名称> <源代码、资源文件> [...]) add_notepad_plugin(Helloworld helloworld/helloworldexport.cpp helloworld/qttestclass.cpp helloworld/qttestclass.h helloworld/qttestclass.ui ) # 以上将会构建出一个名叫 libHelloworld.so 的插件扩展 ``` - 一些 NotepadPluginConfig.cmake 中的变量声明 ```cmake # NOTEPAD_PLUGIN [不重要]CMake 模块名称 # NOTEPAD_PLUGIN_CONFIG [不重要]CMake 模块文件名名称 # NOTEPAD_PLUGIN_INCLUDEDIR [插件 头文件目录]插件开发者可自行使用 # NOTEPAD_PLUGIN_LIBDIR [插件 库存放目录]插件开发者可自行使用 # NOTEPAD_PLUGIN_CORELIB [插件 核心库名称]插件开发者可自行使用 # NOTEPAD_PLUGIN_EXTERNAL_INCLUDES [插件 扩展的头文件目录]插件开发者可自行使用 # NOTEPAD_PLUGIN_EXTERNAL_PLUGIN_INSTALL_DIRECTORY [插件 扩展插件安装目录(位置)]插件开发者可自行使用 # NOTEPAD_BUILD_BY_QT5 # NOTEPAD_BUILD_BY_QT6 [NOTEPAD_BUILD_BY_约定]如果在构建 Notepad-- 时开启了此项,将会向 CMake 构建系统询问相关模块 例如: 询问 Qt5 基本模块: 将会在 find_package(NotepadPlugin REQUIRED) 时自动加入 set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) find_package(Qt5 COMPONENTS Core Widgets REQUIRED) 为开发者自动添加 Qt5 模块依赖: 将会在 add_notepad_plugin 时自动加入 if(NOTEPAD_PLUGIN_QT5) target_link_libraries(${PLUGIN_VAR} Qt5::Core Qt5::Widgets) endif(NOTEPAD_PLUGIN_QT5) ``` - 当前提供插件的 Linux 目录结构 ``` build/_CPack_Packages/Linux/DEB/notepad---1.22.0-Linux ├── control ├── control.tar.gz ├── data.tar.gz ├── debian-binary ├── md5sums └── usr ├── bin │   └── notepad-- ├── include │   └── NotepadPlugin │   ├── pluginGl.h │   └── Qsci │   ├── qsciabstractapis.h │   ├── qsciapis.h │   ├── qscicommand.h │   ├── qscicommandset.h │   ├── qscidocument.h │   ├── qsciglobal.h │   ├── qscilexerasm.h │   ├── qscilexeravs.h │   ├── qscilexerbash.h │   ├── qscilexerbatch.h │   ├── qscilexercmake.h │   ├── qscilexercoffeescript.h │   ├── qscilexercpp.h │   ├── qscilexercsharp.h │   ├── qscilexercss.h │   ├── qscilexercustom.h │   ├── qscilexerd.h │   ├── qscilexerdiff.h │   ├── qscilexeredifact.h │   ├── qscilexerfortran77.h │   ├── qscilexerfortran.h │   ├── qscilexerglobal.h │   ├── qscilexergo.h │   ├── qscilexer.h │   ├── qscilexerhtml.h │   ├── qscilexeridl.h │   ├── qscilexerjava.h │   ├── qscilexerjavascript.h │   ├── qscilexerjson.h │   ├── qscilexerlua.h │   ├── qscilexermakefile.h │   ├── qscilexermarkdown.h │   ├── qscilexermatlab.h │   ├── qscilexernsis.h │   ├── qscilexeroctave.h │   ├── qscilexerpascal.h │   ├── qscilexerperl.h │   ├── qscilexerpo.h │   ├── qscilexerpostscript.h │   ├── qscilexerpov.h │   ├── qscilexerproperties.h │   ├── qscilexerpython.h │   ├── qscilexerruby.h │   ├── qscilexerrust.h │   ├── qscilexerspice.h │   ├── qscilexersql.h │   ├── qscilexertcl.h │   ├── qscilexertex.h │   ├── qscilexertext.h │   ├── qscilexervb.h │   ├── qscilexerverilog.h │   ├── qscilexervhdl.h │   ├── qscilexerxml.h │   ├── qscilexeryaml.h │   ├── qscimacro.h │   ├── qsciprinter.h │   ├── qsciscintillabase.h │   ├── qsciscintilla.h │   ├── qscistyledtext.h │   └── qscistyle.h ├── lib │   ├── cmake │   │   └── NotepadPlugin │   │   └── NotepadPluginConfig.cmake │   └── NotepadPlugin │   └── libQSci.a └── share ├── applications │   └── notepad--.desktop └── notepad-- └── icons └── spark.png 13 directories, 71 files ```