{"id":203322,"date":"2013-11-22T22:55:03","date_gmt":"2013-11-22T18:55:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=203322"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=203322","title":{"rendered":"<span class=\"post_title\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 C++ \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 wxWidgets<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0423\u0436\u0435 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u0438\u0448\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0445\u043e\u0442\u044f \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043c\u044b\u0441\u043b\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<p>  \u0418 \u0432\u043e\u0442, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0436\u0438\u0437\u043d\u044c \u0438 \u0434\u0430\u0441\u0442 \u0442\u043e\u043b\u0447\u043e\u043a \u043a \u043f\u043e\u043a\u043e\u0440\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043d\u0430 C++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 wxWidgets. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Windows, Linux \u0438 OS X, \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u041a\u043e\u043c\u0443-\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f), \u043d\u043e, \u0432\u0441\u0435 \u0436\u0435, \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439, \u0438\u0431\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/h3>\n<p>  <\/p>\n<h4>wxWidgets<\/h4>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:<\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 wxWidgets \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u0430\u0445. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0437 SVN. \u041e\u043d\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u0431\u0435\u0437 \u0431\u0430\u0433\u043e\u0432, \u0437\u0430\u0442\u043e \u0432 \u043d\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u0430\u0445.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/svn.wxwidgets.org\/svn\/wx\/wxWidgets\/trunk\">http:\/\/svn.wxwidgets.org\/svn\/wx\/wxWidgets\/trunk<\/a><\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/habrahabr.ru\/post\/123588\/\">http:\/\/habrahabr.ru\/post\/123588\/<\/a><\/p>\n<p>  \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>DLL Debug<\/code> \u0438 <code>DLL Release<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>Debug<\/code> \u0438 <code>Release<\/code>. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 wxWidgets, \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <code>C\/C++ -&gt; Code Generation -&gt; Runtime Library<\/code> \u0431\u044b\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>Multi-Threaded Debug DLL \u0438 Multi-Threaded DLL<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u0441 \u00abDLL\u00bb \u0432 \u043a\u043e\u043d\u0446\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043d\u0430\u0441 wxWidgets \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c CRT.<\/p>\n<p>  \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 <code>DLL Debug<\/code> \u0438 <code>DLL Release<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043e\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430. \u0412\u0441\u0435 \u044d\u0442\u043e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0435\u0449\u0435 \u0440\u0430\u0437. \u041e\u0431\u044b\u0447\u043d\u043e 2-3 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e \u0442\u0430\u043a\u0436\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 wxWidgets \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <code>%WXWIN%<\/code> (\u0434\u043b\u044f Windows), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438 wxWidgets. \u0414\u043b\u044f Linux \u0438 OS X \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>configure && make && make install<\/code>.<\/p>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f configure:  <\/p>\n<ul>\n<li><b>Debug:<\/b> <code>configure --enable-shared --disable-static --enable-unicode --disable-compat28 --disable-final --enable-debug<\/code><\/li>\n<li><b>Release:<\/b> <code>configure --enable-shared --disable-static --enable-unicode --disable-compat28 --enable-final --disable-debug<\/code><\/li>\n<\/ul>\n<h4>CMake<\/h4>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 CMake, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439, \u043a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0445 \u043e\u0431\u0437\u043e\u0440\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442:  <\/p>\n<ul>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/155467\/\">http:\/\/habrahabr.ru\/post\/155467\/<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/178839\/\">http:\/\/habrahabr.ru\/post\/178839\/<\/a><\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/132313\/\">http:\/\/habrahabr.ru\/post\/132313\/<\/a><\/li>\n<\/ul>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, CMake \u2013 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 Visual Studio (Windows), Makefile\/CodeBlocks (Linux), Makefile\/XCode (OS X) \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u0430\u043c \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430 \u043b\u0438\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c CMake \u043c\u043e\u0436\u043d\u043e \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/www.cmake.org\/cmake\/resources\/software.html\">http:\/\/www.cmake.org\/cmake\/resources\/software.html<\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 wxWidgets (Linux, OS X) \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, \u0430 \u043f\u043e\u0442\u043e\u043c \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Release-\u0432\u0435\u0440\u0441\u0438\u044e, \u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c make uninstall \u0434\u043b\u044f Debug-\u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b  <\/p>\n<ul>\n<li>\/usr\/local\/bin\/wx-config<\/li>\n<li>\/usr\/local\/bin\/wxrc<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0442\u043e \u0434\u043b\u044f Release-\u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442 Debug-\u0432\u0435\u0440\u0441\u0438\u0438. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Debug-\u0432\u0435\u0440\u0441\u0438\u044e wxWidgets, \u0442\u043e \u0432 Linux \u0438 OS X \u0443 \u0432\u0430\u0441, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e Debug-\u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 Release-\u0432\u0435\u0440\u0441\u0438\u0438. \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e CMake \u0431\u0435\u0440\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 wx-config, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u0434\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0418\u043b\u0438 \u0434\u043b\u044f Debug \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f Release.<\/p>\n<h4>Visual C++ (Windows)<\/h4>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 wxWidgets \u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u0432 Windows \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Visual C++ 2012. Express \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f IDE \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0431\u0443\u0434\u0443\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0432 \u0442\u0430\u043d\u043a\u0435, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 Visual C++ 2012: <a href=\"http:\/\/www.microsoft.com\/visualstudio\/rus\/products\/visual-studio-express-products\">http:\/\/www.microsoft.com\/visualstudio\/rus\/products\/visual-studio-express-products<\/a><\/p>\n<h4>DialogBlocks<\/h4>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0434\u0430\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 DialogBlocks. \u0422\u0430\u043a\u0438-\u0434\u0430, \u043e\u043d \u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u043d\u043e \u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0444\u043e\u0440\u043c. \u0425\u043e\u0442\u044f \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0443\u043a\u0430\u043c\u0438 (\u043a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0432 \u0432\u043e\u0441\u043f\u0438\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044f\u0445 \u0438 \u044f\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430).<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c DialogBlocks \u043c\u043e\u0436\u043d\u043e \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/www.anthemion.co.uk\/dialogblocks\/download.htm\">http:\/\/www.anthemion.co.uk\/dialogblocks\/download.htm<\/a><\/p>\n<h3>\u041d\u0430\u0447\u0430\u043b\u043e<\/h3>\n<p>  <\/p>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a<\/h4>\n<p>  \u042f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u043d\u0430 \u0432\u043a\u0443\u0441 \u0438 \u0446\u0432\u0435\u0442 \u0444\u043b\u043e\u043c\u0430\u0441\u0442\u0435\u0440\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u043d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043d\u0435\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0435, \u043d\u043e \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u0430 \u0441\u0435\u0431\u044f \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435.  <\/p>\n<ul>\n<li><b>build<\/b> \u2013 \u043f\u0430\u043f\u043a\u0430 \u0441 \u043e\u0431\u0449\u0438\u043c CMake \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0438 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/li>\n<li><b>build\/bin\/&lt;Configuration&gt;<\/b> \u2014 \u043f\u0430\u043f\u043a\u0430, \u043a\u0443\u0434\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/li>\n<li><b>\/include<\/b> \u2013 \u043f\u0430\u043f\u043a\u0430 \u0441 \u043e\u0431\u0449\u0438\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f precompiled headers)<\/li>\n<li><b>\/&lt;ProjectName&gt;<\/b> \u2014 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u044f \u043f\u0430\u043f\u043a\u0430)<\/li>\n<li><b>\/&lt;ThirdParty&gt;<\/b> \u2014 \u043f\u0430\u043f\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u0436\u0434\u0430\u044f \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435)<\/li>\n<li><b>\/ThirdParty\/build<\/b> \u2013 \u043f\u0430\u043f\u043a\u0430 \u0441 \u043e\u0431\u0449\u0438\u043c CMake \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0438 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 solution)<\/li>\n<li><b>\/ThirdParty\/&lt;LibName&gt;<\/b> \u2014 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439)<\/li>\n<li><b>\/&lt;ProjectName&gt;\/&lt;OS-Name&gt;<\/b> \u2014 \u0441\u044e\u0434\u0430 CMake \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u041e\u0421.<\/li>\n<\/ul>\n<h4>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 CMakeList<\/h4>\n<p>  \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 CMake \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0431\u0449\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>  <b>build\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">cmake_minimum_required(VERSION 2.6.0)  # We will generate both Debug and Release project files at the same time # for Windows and OS X if(WIN32 OR APPLE) \tset(CMAKE_CONFIGURATION_TYPES &quot;Debug;Release&quot; CACHE STRING &quot;&quot; FORCE) \tset(LIB_SUFFIX &quot;&quot;) endif(WIN32 OR APPLE)  # For Linux we will need to execute CMake twice in order to generate # Debug and Release versions of Makefiles if(UNIX AND NOT APPLE) \tset(LINUX ON) \tset(LIB_SUFFIX \/${CMAKE_BUILD_TYPE}) endif(UNIX AND NOT APPLE)  set(PROJECT_NAME wxModularHost) project(${PROJECT_NAME})  # If there are any additional CMake modules (e.g. module which searches # for OpenCV or for DirectShow libs), then CMake should start searching # for them in current folder set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})  if(APPLE) \tset(OS_BASE_NAME Mac) \tset(CMAKE_OSX_SYSROOT &quot;macosx10.6&quot;) endif(APPLE) if(LINUX) \tset(OS_BASE_NAME Linux) endif(LINUX) if(WIN32) \tset(OS_BASE_NAME Win) endif(WIN32)  # Here we specify the list of wxWidgets libs which we will use in our project set(wxWidgets_USE_LIBS base core adv aui net gl xml propgrid html)  # Here we specify that we need DLL version of wxWidgets libs and dynamic CRT # This is a MUST for applications with plugins. Both app and DLL plugin MUST # use the same instance of wxWidgets and the same event loop. set(BUILD_SHARED_LIBS 1)  # Find wxWidgets library on current PC # You should have %WXWIN%  environment variable which should point to the # directory where wxWidgets source code is placed. # wxWidgets libs MUST be compiled for both Debug and Release versions find_package(wxWidgets REQUIRED)  # For some reason CMake generates wrong list of definitions. # Each item should start with \/D but it does not. # We need to fix that manually set(wxWidgets_DEFINITIONS_TEMP) foreach(DEFINITION ${wxWidgets_DEFINITIONS})  \tif(NOT ${DEFINITION} MATCHES &quot;\/D.*&quot;) \t\tset(DEFINITION &quot;\/D${DEFINITION}&quot;) \tendif() \tset(wxWidgets_DEFINITIONS_TEMP ${wxWidgets_DEFINITIONS_TEMP} \t\t${DEFINITION}) endforeach(${DEFINITION}) set(wxWidgets_DEFINITIONS ${wxWidgets_DEFINITIONS_TEMP})  # Here we add some definitions which prevent Visual Studio from # generating tons of warnings about unsecure function calls. # See http:\/\/msdn.microsoft.com\/en-us\/library\/ttcz0bys.aspx if(WIN32) \tset(wxWidgets_DEFINITIONS ${wxWidgets_DEFINITIONS}; \t\t\/D_CRT_SECURE_NO_DEPRECATE; \t\t\/D_CRT_NONSTDC_NO_DEPRECATE; \t\t\/D_UNICODE) \tset(CMAKE_CXX_FLAGS &quot;${CMAKE_CXX_FLAGS} \/MP \/wd4996&quot;) endif(WIN32)  # Since we are going to use wxWidgets in all subrojects, # it's OK to create the variable which will contain # common preprocessor definitions. This variable will be # used in subprojects. set(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS}; \t${wxWidgets_DEFINITIONS})  # Variable which points to root folder of our source code set(PROJECT_ROOT_DIR ${PROJECT_SOURCE_DIR}\/..)  # If any ThirdParty libraries are going to be # used in our project then it would be better to put # them into separate subfolder. We will create # the variable which points to this subfolder. set(THIRD_PARTY_DIR ${PROJECT_ROOT_DIR}\/ThirdParty)  set(BASE_INCLUDE_DIRECTORIES ${PROJECT_ROOT_DIR}\/include)  # Add wxWidgets include paths to the list of # include directories for all projects. include_directories(${wxWidgets_INCLUDE_DIRS})  set(CMAKE_CXX_FLAGS_DEBUG \t&quot;${CMAKE_CXX_FLAGS_DEBUG} \t\/D__WXDEBUG__=1&quot; )  # Now we can include all our subprojects. # CMake will generate project files for them add_subdirectory (..\/wxModularHost \t..\/..\/wxModularHost\/${OS_BASE_NAME}${LIB_SUFFIX}) <\/code><\/pre>\n<h4>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/h4>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CMake \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c shell- \u0438\u043b\u0438 batch-\u0441\u043a\u0440\u0438\u043f\u0442\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0442\u0438\u043f\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 CMake \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h5>Windows (cm.bat)<\/h5>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 batch-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 Visual Studio \u0434\u043b\u044f x86 \u0438 x64, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043f\u043e\u0434 \u043a\u0430\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"bash\">rem @echo off IF &quot;%1&quot; == &quot;&quot; GOTO NO_PARAMS IF &quot;%1&quot; == &quot;x86&quot; GOTO CMAKE_86 IF &quot;%1&quot; == &quot;86&quot;  GOTO CMAKE_86 IF &quot;%1&quot; == &quot;x64&quot; GOTO CMAKE_64 IF &quot;%1&quot; == &quot;64&quot;  GOTO CMAKE_64  ECHO %1 ECHO &quot;Nothing to do&quot; GOTO End  :CMAKE_86 \tECHO &quot;Configuring for x86&quot; \tcm86.bat \tGOTO End :CMAKE_64 \tECHO &quot;Configuring for x64&quot; \tcm64.bat \tGOTO End :NO_PARAMS \tECHO &quot;No parameters specified&quot; \tIF EXIST &quot;%ProgramW6432%&quot; GOTO CMAKE_64 \tGOTO CMAKE_86 :End <\/code><\/pre>\n<h5>Windows (cm86.bat)<\/h5>\n<p>  <\/p>\n<pre><code class=\"bash\">rmdir \/S \/Q Win mkdir Win cd Win cmake ..\/ -G &quot;Visual Studio 11&quot; cd .. <\/code><\/pre>\n<h5>Windows (cm64.bat)<\/h5>\n<p>  <\/p>\n<pre><code class=\"bash\">rmdir \/S \/Q Win mkdir Win cd Win cmake ..\/ -G &quot;Visual Studio 11 Win64&quot; cd .. <\/code><\/pre>\n<h4>Linux (cmLinux.sh)<\/h4>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/bash echo OS Type: $OSTYPE  # ---------------------------------- # build Debug configuration makefile # ---------------------------------- echo building Debug configuration makefile echo directory &quot;LinuxDebug&quot; rm -dr &quot;LinuxDebug&quot; mkdir &quot;LinuxDebug&quot; cd &quot;LinuxDebug&quot; cmake -G &quot;Unix Makefiles&quot; -DCMAKE_BUILD_TYPE:STRING=Debug ..\/ cd ..  # ---------------------------------- # build Release configuration makefile # ---------------------------------- echo building Release configuration makefile echo directory &quot;LinuxRelease&quot; rm -dr &quot;LinuxRelease&quot; mkdir &quot;LinuxRelease&quot; cd &quot;LinuxRelease&quot; cmake -G &quot;Unix Makefiles&quot; -DCMAKE_BUILD_TYPE:STRING=Release ..\/ cd .. <\/code><\/pre>\n<h3>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 wxWidgets-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 CMake<\/h3>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 wxModularHostApp) \u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 MainFrame).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DialogBlocks, \u0442\u043e, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0430\u0440\u044b \u0444\u0430\u0439\u043b\u043e\u0432 h\/cpp \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0435\u0449\u0435 .rc \u0444\u0430\u0439\u043b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0438\u043b\u0438 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 <code>%WXWIN%\\samples\\minimal<\/code><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e CMake-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>  <b>wxModularHost\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">set(SRCS \tMainFrame.cpp \twxModularHostApp.cpp) set(HEADERS \tMainFrame.h \twxModularHostApp.h)  set(INCLUDE_DIRECTORIES ${BASE_INCLUDE_DIRECTORIES})  if(WIN32) \tset(SRCS ${SRCS} wxModularHost.rc) \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS}; \t\t\/D_USRDLL; \t\t\/DwxUSE_NO_MANIFEST=1; \t\t\/D__STDC_CONSTANT_MACROS) endif(WIN32)  set(LIBS ${wxWidgets_LIBRARIES})  set(EXECUTABLE_NAME wxModularHost)  add_definitions(${PREPROCESSOR_DEFINITIONS}) include_directories(${INCLUDE_DIRECTORIES})  if(WIN32) \tset(EXECUTABLE_TYPE WIN32) endif(WIN32) if(APPLE) \tset(MACOSX_BUNDLE YES) \tset(EXECUTABLE_TYPE MACOSX_BUNDLE) endif(APPLE) if(LINUX) \tset(EXECUTABLE_TYPE &quot;&quot;) endif(LINUX)  set(PROJECT_FILES ${SRCS} ${HFILES}) add_executable(${EXECUTABLE_NAME} ${EXECUTABLE_TYPE} ${PROJECT_FILES})  set(EXE_DIR bin) set(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${EXE_DIR}${LIB_SUFFIX}) set_target_properties(${EXECUTABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_LOCATION}) target_link_libraries(${EXECUTABLE_NAME} ${LIBS}) <\/code><\/pre>\n<h3>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (Precompiled Headers)<\/h3>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Precompiled_header\">http:\/\/en.wikipedia.org\/wiki\/Precompiled_header<\/a>).<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430:<br \/>  <b>include\/stdwx.h<\/b><\/p>\n<pre><code class=\"cpp\">#ifndef _STDWX_H_ #define _STDWX_H_  #if defined(WIN32) || defined(WINDOWS) #include &lt;windows.h&gt; #include &lt;winnt.h&gt; #define PLUGIN_EXPORTED_API\tWXEXPORT #else #define PLUGIN_EXPORTED_API\textern &quot;C&quot; #endif \/\/ SYSTEM INCLUDES \/\/ For compilers that support precompilation, includes &quot;wx\/wx.h&quot;. #include &quot;wx\/wxprec.h&quot; #ifdef __BORLANDC__     #pragma hdrstop #endif #include &quot;wx\/wx.h&quot; #include &lt;wx\/cmdline.h&gt; #include &lt;wx\/config.h&gt; #include &lt;wx\/defs.h&gt; #include &lt;wx\/dir.h&gt; #include &lt;wx\/display.h&gt; #include &lt;wx\/dynlib.h&gt; #include &lt;wx\/dynload.h&gt; #include &lt;wx\/fileconf.h&gt; #include &lt;wx\/filename.h&gt; #include &lt;wx\/frame.h&gt; #include &lt;wx\/glcanvas.h&gt; #include &lt;wx\/hashmap.h&gt; #include &lt;wx\/image.h&gt; #include &lt;wx\/imaglist.h&gt; #include &lt;wx\/intl.h&gt; #include &lt;wx\/list.h&gt; #include &lt;wx\/notebook.h&gt; #include &lt;wx\/stdpaths.h&gt; #include &lt;wx\/sstream.h&gt; #include &lt;wx\/thread.h&gt; #include &lt;wx\/treebook.h&gt; #include &lt;wx\/wfstream.h&gt; #include &lt;wx\/wupdlock.h&gt; #include &lt;wx\/textfile.h&gt; #include &lt;wx\/socket.h&gt; #include &lt;wx\/mimetype.h&gt; #include &lt;wx\/ipc.h&gt;  #endif <\/code><\/pre>\n<p>  <b>include\/stdwx.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; <\/code><\/pre>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c C++ \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0435\u0449\u0435 \u043d\u0430\u0443\u0447\u0438\u0442\u044c CMake \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 Visual Studio \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041d\u0435 \u043f\u0440\u0438\u043f\u043e\u043c\u043d\u044e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u0432\u0437\u044f\u043b\u0441\u044f, \u043d\u043e \u0432\u0440\u043e\u0434\u0435 \u043e\u0442\u0441\u044e\u0434\u0430 (<a href=\"http:\/\/public.kitware.com\/Bug\/file_download.php?file_id=901&amp;amp;type=bug\">http:\/\/public.kitware.com\/Bug\/file_download.php?file_id=901&amp;type=bug<\/a>).\u00a0\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 CMake-\u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/T-Rex\/wxModularApp\/blob\/master\/build\/PCHSupport.cmake\">https:\/\/github.com\/T-Rex\/wxModularApp\/blob\/master\/build\/PCHSupport.cmake<\/a>.<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 build\/CmakeLists.txt \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <b>build\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">cmake_minimum_required(VERSION 2.6.0) include(PCHSupport.cmake) ... <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 .CPP \u0444\u0430\u0439\u043b\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430<\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; <\/code><\/pre>\n<h3>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0431\u0435\u0437 GUI<\/h3>\n<p>  <\/p>\n<h4>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438<\/h4>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u043c\u0435\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0435. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0448\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<p>  \u0422.\u0435. \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u0434\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0438 \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445 \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  <b>wxNonGuiPluginBase\/Declarations.h<\/b><\/p>\n<pre><code class=\"cpp\">#ifndef _DECLARATIONS_H #define _DECLARATIONS_H  #if defined(__WXMSW__) #ifdef DEMO_PLUGIN_EXPORTS #define DEMO_API __declspec(dllexport) #else #define DEMO_API __declspec(dllimport) #endif #else #define DEMO_API #endif  #endif \/\/ _DECLARATIONS_H <\/code><\/pre>\n<p>  <b>wxNonGuiPluginBase\/wxNonGuiPluginBase.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &quot;Declarations.h&quot;  class DEMO_API wxNonGuiPluginBase : public wxObject { \tDECLARE_ABSTRACT_CLASS(wxNonGuiPluginBase) public: \twxNonGuiPluginBase(); \tvirtual ~wxNonGuiPluginBase();  \tvirtual int Work() = 0; };  typedef wxNonGuiPluginBase * (*CreatePlugin_function)(); typedef void (*DeletePlugin_function)(wxNonGuiPluginBase * plugin); <\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b Declarations.h \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <code>DEMO_API<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0443 \u043d\u0430\u0441 \u043a\u043b\u0430\u0441\u0441 <code>wxNonGuiPluginBase<\/code> \u0438\u043b\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 <code>dllexport\/dllimport<\/code> (\u0441\u043c. <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/3y1sfaz2(v=vs.90).aspx)\">http:\/\/msdn.microsoft.com\/en-us\/library\/3y1sfaz2(v=vs.90).aspx)<\/a> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <code>DEMO_PLUGIN_EXPORTS<\/code>. \u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 wxNonGuiPluginBase \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c <code>DEMO_PLUGIN_EXPORTS<\/code> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0430 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0445 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 wxNonGuiPluginBase \u0438 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2013 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 wxNonGuiPluginBase \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>DEMO_API<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>dllexport<\/code>, \u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u2013 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>dllimport<\/code>.<\/p>\n<p>  <b>wxNonGuiPluginBase\/wxNonGuiPluginBase.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;wxNonGuiPluginBase.h&quot;  IMPLEMENT_ABSTRACT_CLASS(wxNonGuiPluginBase, wxObject)  wxNonGuiPluginBase::wxNonGuiPluginBase() { }  wxNonGuiPluginBase::~wxNonGuiPluginBase() { } <\/code><\/pre>\n<p>  <b>wxNonGuiPluginBase\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">set (SRCS \twxNonGuiPluginBase.cpp) set (HEADERS \tDeclarations.h \twxNonGuiPluginBase.h)  set(LIBRARY_NAME wxNonGuiPluginBase)  if(WIN32) \t# Only for Windows: \t# we add additional preprocessor definitons \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS}; \t\t\/D_USRDLL;\/DDEMO_PLUGIN_EXPORTS;\/D__STDC_CONSTANT_MACROS) endif(WIN32)  # Add 2 files for precompiled headers set(SRCS ${SRCS} ${HEADERS} \t${PROJECT_ROOT_DIR}\/include\/stdwx.h \t${PROJECT_ROOT_DIR}\/include\/stdwx.cpp)  # Set preprocessor definitions add_definitions(${PREPROCESSOR_DEFINITIONS}) # Set include directories include_directories(${INCLUDE_DIRECTORIES} ${BASE_INCLUDE_DIRECTORIES}) # Set library search paths link_directories(${LINK_DIRECTORIES}) # Setup the project name and assign the source files for this project add_library(${LIBRARY_NAME} SHARED ${SRCS})  #Setup the output folder set(DLL_DIR bin) set(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${DLL_DIR}${LIB_SUFFIX}) set_target_properties(${LIBRARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_LOCATION})  # Set additional dependencies target_link_libraries(${LIBRARY_NAME} ${wxWidgets_LIBRARIES})  # Setup precompiled headers set_precompiled_header(${LIBRARY_NAME} \t${PROJECT_ROOT_DIR}\/include\/stdwx.h \t${PROJECT_ROOT_DIR}\/include\/stdwx.cpp) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u0430\u043d\u0435\u0435, \u043c\u0430\u043a\u0440\u043e\u0441 <code>PREPROCESSOR_DEFINITIONS<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <code>DEMO_PLUGIN_EXPORTS<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 Definitions.h<\/p>\n<h4>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d<\/h4>\n<p>  \u0412 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 <code>wxNonGuiPluginBase<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0434\u043b\u044f \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  <b>SampleNonGuiPlugin\/SampleNonGuiPlugin.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;wxNonGuiPluginBase.h&gt;  class SampleNonGuiPlugin : public wxNonGuiPluginBase { \tDECLARE_DYNAMIC_CLASS(SampleNonGuiPlugin) public: \tSampleNonGuiPlugin(); \tvirtual ~SampleNonGuiPlugin();  \tvirtual int Work(); }; <\/code><\/pre>\n<p>  <b>SampleNonGuiPlugin\/SampleNonGuiPlugin.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;SampleNonGuiPlugin.h&quot;  IMPLEMENT_DYNAMIC_CLASS(SampleNonGuiPlugin, wxObject)  SampleNonGuiPlugin::SampleNonGuiPlugin() { }  SampleNonGuiPlugin::~SampleNonGuiPlugin() { }  int SampleNonGuiPlugin::Work() { \treturn 10; } <\/code><\/pre>\n<p>  <b>SampleNonGuiPlugin\/SampleNonGuiPlugin.def<\/b><\/p>\n<pre><code class=\"cpp\">LIBRARY\t&quot;SampleNonGuiPlugin&quot;  EXPORTS \tCreatePlugin=CreatePlugin \tDeletePlugin=DeletePlugin <\/code><\/pre>\n<p>  <b>SampleNonGuiPlugin\/SampleNonGuiPluginExports.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &lt;wxNonGuiPluginBase.h&gt; #include &quot;SampleNonGuiPlugin.h&quot;  PLUGIN_EXPORTED_API wxNonGuiPluginBase * CreatePlugin() { \treturn new SampleNonGuiPlugin; }  PLUGIN_EXPORTED_API void DeletePlugin(wxNonGuiPluginBase * plugin) { \twxDELETE(plugin); } <\/code><\/pre>\n<p>  <b>SampleNonGuiPlugin\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">set (SRCS \tSampleNonGuiPlugin.cpp \tSampleNonGuiPluginExports.cpp) set (HEADERS \tSampleNonGuiPlugin.h)  set(LIBRARY_NAME SampleNonGuiPlugin)  if(WIN32) \tset(SRCS ${SRCS} ${LIBRARY_NAME}.def) \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS};\/D_USRDLL;\/D__STDC_CONSTANT_MACROS) \tset(LINK_DIRECTORIES \t\t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(ConfigurationName)) \tset(DEMO_LIBS wxNonGuiPluginBase.lib) endif(WIN32)  set(SRCS ${SRCS} ${HEADERS} \t${PROJECT_ROOT_DIR}\/include\/stdwx.h \t${PROJECT_ROOT_DIR}\/include\/stdwx.cpp)  add_definitions(${PREPROCESSOR_DEFINITIONS}) include_directories(${INCLUDE_DIRECTORIES} ${BASE_INCLUDE_DIRECTORIES} \t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase) link_directories(${LINK_DIRECTORIES}) add_library(${LIBRARY_NAME} SHARED ${SRCS})  set(DLL_DIR bin) set(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${DLL_DIR}\/${CMAKE_CFG_INTDIR}\/plugins) set_target_properties(${LIBRARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_LOCATION})  target_link_libraries(${LIBRARY_NAME} ${DEMO_LIBS} ${wxWidgets_LIBRARIES}) add_dependencies(${LIBRARY_NAME} wxNonGuiPluginBase) set_precompiled_header(${LIBRARY_NAME} \t${PROJECT_ROOT_DIR}\/include\/stdwx.h \t${PROJECT_ROOT_DIR}\/include\/stdwx.cpp) <\/code><\/pre>\n<p>  DEF-\u0444\u0430\u0439\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u0411\u0435\u0437 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u043c\u0435\u043d\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 DLL. \u041f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f DEF-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 DLL \u043c\u043e\u0436\u043d\u043e \u0437\u0434\u0435\u0441\u044c:  <\/p>\n<ul>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/office\/bb687850.aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/office\/bb687850.aspx<\/a><\/li>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/d91k01sh.aspx\">http:\/\/msdn.microsoft.com\/en-us\/library\/d91k01sh.aspx<\/a><\/li>\n<\/ul>\n<h3>\u041c\u043e\u0434\u0443\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0445\u043e\u0441\u0442-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0412 \u0446\u0435\u043b\u044f\u0445 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0430 \u0435\u0449\u0435 \u043b\u0443\u0447\u0448\u0435 \u2013 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0435\u0449\u0435 \u0440\u0430\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432:  <\/p>\n<ul>\n<li>\u041f\u043b\u0430\u0433\u0438\u043d \u2013 \u044d\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/li>\n<li>\u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0435\u0441\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>CreatePlugin()<\/code> \u0438 <code>DeletePlugin()<\/code><\/li>\n<li>\u0412\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>CreatePlugin()<\/code><\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>wxNonGuiPluginBase<\/code>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u043d\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/li>\n<li>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>CreatePlugin()<\/code><\/li>\n<li>\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 (\u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>DeletePlugin()<\/code>) \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/li>\n<li>\u041f\u043e\u043c\u0438\u043c\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0435\u0449\u0435 \u0443\u043c\u0435\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u043f\u043a\u0435.<\/li>\n<\/ul>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0439\u0442\u0438 \u043a \u0442\u0430\u043a\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u0430\u043c:  <\/p>\n<ul>\n<li>\u0420\u0430\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e, \u0442\u043e \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<li>\u0420\u0430\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439, \u0442\u043e \u043d\u0430\u0434\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<li>\u0420\u0430\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0440\u0430\u043d\u0435\u0435, \u0447\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443.<\/li>\n<\/ul>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b:<br \/>  <b>wxModularCore\/wxModularCore.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;wxNonGuiPluginBase.h&gt;  \/\/ We need to know which DLL produced the specific plugin object. WX_DECLARE_HASH_MAP(wxNonGuiPluginBase*, wxDynamicLibrary*, \t\t\t\twxPointerHash, wxPointerEqual, \t\t\t\twxNonGuiPluginToDllDictionary); \/\/ We also need to keep the list of loaded DLLs WX_DECLARE_LIST(wxDynamicLibrary, wxDynamicLibraryList); \/\/ And separate list of loaded plugins for faster access. WX_DECLARE_LIST(wxNonGuiPluginBase, wxNonGuiPluginBaseList);  class wxModularCoreSettings;  class wxModularCore { public: \twxModularCore(); \tvirtual ~wxModularCore();  \tvirtual wxString GetPluginsPath(bool forceProgramPath) const; \tvirtual wxString GetPluginExt(); \tbool LoadPlugins(bool forceProgramPath); \tbool UnloadPlugins();  \tconst wxNonGuiPluginBaseList & GetNonGuiPlugins() const;  \tvoid Clear(); private: \tbool LoadNonGuiPlugins(const wxString & pluginsDirectory); \tbool UnloadNonGuiPlugins();  \tbool RegisterNonGuiPlugin(wxNonGuiPluginBase * plugin); \tbool UnRegisterNonGuiPlugin(wxNonGuiPluginBase * plugin);  \twxDynamicLibraryList m_DllList; \twxNonGuiPluginToDllDictionary m_MapNonGuiPluginsDll; \twxNonGuiPluginBaseList m_NonGuiPlugins;  \twxModularCoreSettings * m_Settings; }; <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e:  <\/p>\n<ul>\n<li>\u0412 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0435\u0441\u0442\u044c \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (<code>wxDynamicLibraryList<\/code>), \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (<code>wxNonGuiPluginBaseList<\/code>), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 (<code>wxNonGuiPluginToDllDictionary<\/code>)<\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f Windows \u044d\u0442\u043e .dll, \u0430 \u0434\u043b\u044f Linux \u0438 OS X \u044d\u0442\u043e .so)<\/li>\n<li>\u0422\u0430\u043a\u0436\u0435 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c.<\/li>\n<li>\u0415\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u0412 \u043a\u043b\u0430\u0441\u0441\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 <code>m_Settings<\/code>. \u042d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043b\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043d\u0438\u0445, \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438\u043b\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043f\u0443\u0442\u044c \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439). \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/li>\n<\/ul>\n<p>  <b>wxModularCore\/wxModularCore.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;wxModularCore.h&quot; #include &quot;wxModularCoreSettings.h&quot; #include &lt;wx\/listimpl.cpp&gt; WX_DEFINE_LIST(wxDynamicLibraryList); WX_DEFINE_LIST(wxNonGuiPluginBaseList);  wxModularCore::wxModularCore() \t:m_Settings(new wxModularCoreSettings) { \t\/\/ This will allow to delete all objects from this list automatically \tm_DllList.DeleteContents(true); }  wxModularCore::~wxModularCore() { \tClear(); \twxDELETE(m_Settings); }  void wxModularCore::Clear() { \tUnloadPlugins(); \t\/\/ TODO: Add the code which resets the object to initial state }  bool wxModularCore::LoadPlugins(bool forceProgramPath) { \twxString pluginsRootDir = GetPluginsPath(forceProgramPath);  \twxFileName fn; \tfn.AssignDir(pluginsRootDir); \twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \tfn.AppendDir(wxT(&quot;plugins&quot;)); \twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \tif (!fn.DirExists()) \t\treturn false;  \treturn LoadNonGuiPlugins(fn.GetFullPath()); }  bool wxModularCore::UnloadPlugins() { \treturn UnloadNonGuiPlugins(); }  bool wxModularCore::LoadNonGuiPlugins(const wxString & pluginsDirectory) { \twxFileName fn; \tfn.AssignDir(pluginsDirectory); \twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \tfn.AppendDir(wxT(&quot;nongui&quot;)); \twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \tif (!fn.DirExists()) \t\treturn false;  \tif(!wxDirExists(fn.GetFullPath())) return false; \twxString wildcard = wxString::Format(wxT(&quot;*.%s&quot;), GetPluginExt().GetData()); \twxArrayString pluginPaths; \twxDir::GetAllFiles(fn.GetFullPath(), &pluginPaths, wildcard); \tfor(size_t i = 0; i &lt; pluginPaths.GetCount(); ++i) \t{ \t\twxString fileName = pluginPaths[i]; \t\twxDynamicLibrary * dll = new wxDynamicLibrary(fileName); \t\tif (dll-&gt;IsLoaded()) \t\t{ \t\t\twxDYNLIB_FUNCTION(CreatePlugin_function, CreatePlugin, *dll); \t\t\tif (pfnCreatePlugin) \t\t\t{ \t\t\t\twxNonGuiPluginBase* plugin = pfnCreatePlugin(); \t\t\t\tRegisterNonGuiPlugin(plugin); \t\t\t\tm_DllList.Append(dll); \t\t\t\tm_MapNonGuiPluginsDll[plugin] = dll; \t\t\t} \t\t\telse \t\t\t\twxDELETE(dll); \t\t} \t}  \treturn true; }  bool wxModularCore::UnloadNonGuiPlugins() { \tbool result = true; \twxNonGuiPluginBase * plugin = NULL; \twhile (m_NonGuiPlugins.GetFirst() && (plugin = \t\tm_NonGuiPlugins.GetFirst()-&gt;GetData())) \t{ \t\tresult &= UnRegisterNonGuiPlugin(plugin); \t} \treturn result; }  wxString wxModularCore::GetPluginsPath(bool forceProgramPath) const { \twxString path; \tif (m_Settings-&gt;GetStoreInAppData() && !forceProgramPath) \t\tpath = wxStandardPaths::Get().GetConfigDir(); \telse \t\tpath = wxPathOnly(wxStandardPaths::Get().GetExecutablePath()); \treturn path; }  wxString wxModularCore::GetPluginExt() { \treturn #if defined(__WXMSW__) \t\twxT(&quot;dll&quot;); #else \t\twxT(&quot;so&quot;); #endif }  bool wxModularCore::RegisterNonGuiPlugin(wxNonGuiPluginBase * plugin) { \tm_NonGuiPlugins.Append(plugin); \treturn true; }  bool wxModularCore::UnRegisterNonGuiPlugin(wxNonGuiPluginBase * plugin) { \twxNonGuiPluginBaseList::compatibility_iterator it = \t\tm_NonGuiPlugins.Find(plugin); \tif (it == NULL) \t\treturn false;  \tdo \t{ \t\twxDynamicLibrary * dll = m_MapNonGuiPluginsDll[plugin]; \t\tif (!dll) \/\/ Probably plugin was not loaded from dll \t\t\tbreak;  \t\twxDYNLIB_FUNCTION(DeletePlugin_function, DeletePlugin, *dll); \t\tif (pfnDeletePlugin) \t\t{ \t\t\tpfnDeletePlugin(plugin); \t\t\tm_NonGuiPlugins.Erase(it); \t\t\tm_MapNonGuiPluginsDll.erase(plugin); \t\t\treturn true; \t\t} \t} while (false);  \t\/\/ If plugin is not loaded from DLL (e.g. embedded into executable) \twxDELETE(plugin); \tm_NonGuiPlugins.Erase(it);  \treturn true; }  const wxNonGuiPluginBaseList & wxModularCore::GetNonGuiPlugins() const { \treturn m_NonGuiPlugins; } <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 <code>LoadNonGuiPlugins()<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 <code>wxDYNLIB_FUNCTION<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>CreatePlugin()<\/code>. \u0422\u0438\u043f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <code>CreatePlugin_function<\/code> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432 wxNonGuiPluginBase.h.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434 <code>UnRegisterNonGuiPlugin()<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0439, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430\u0439\u0434\u0435\u043d \u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0438\u0437 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>DeletePlugin()<\/code> \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u043c\u044b \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e), \u0442\u043e \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <b>wxModularCore\/wxModularCoreSettings.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  class wxModularCoreSettings { public: \twxModularCoreSettings(); \twxModularCoreSettings(const wxModularCoreSettings & settings); \twxModularCoreSettings & operator = (const wxModularCoreSettings & settings); \tvirtual ~wxModularCoreSettings();  \tvoid SetStoreInAppData(const bool & val); \tbool GetStoreInAppData() const; protected: \tvirtual void CopyFrom(const wxModularCoreSettings & settings); private: \tbool m_bStoreInAppData; \/\/ Should we store data in Application Data folder or in .exe folder }; <\/code><\/pre>\n<p>  <b>wxModularCore\/wxModularCoreSettings.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;wxModularCoreSettings.h&quot;  wxModularCoreSettings::wxModularCoreSettings() \t: m_bStoreInAppData(false) { }  wxModularCoreSettings::wxModularCoreSettings(const wxModularCoreSettings & settings) { \tCopyFrom(settings); }  wxModularCoreSettings & wxModularCoreSettings::operator = (const wxModularCoreSettings & settings) { \tif (this != &settings) \t{ \t\tCopyFrom(settings); \t} \treturn *this; }  wxModularCoreSettings::~wxModularCoreSettings() {  }  void wxModularCoreSettings::CopyFrom(const wxModularCoreSettings & settings) { \tm_bStoreInAppData = settings.m_bStoreInAppData; }  void wxModularCoreSettings::SetStoreInAppData(const bool & value) { \tm_bStoreInAppData = value; }  bool wxModularCoreSettings::GetStoreInAppData() const { \treturn m_bStoreInAppData; } <\/code><\/pre>\n<p>  <b>wxModularCore\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">set (SRCS \twxModularCore.cpp \twxModularCoreSettings.cpp) set (HEADERS \twxModularCore.h \twxModularCoreSettings.h)  set(LIBRARY_NAME wxModularCore)  if(WIN32) \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS};\/D__STDC_CONSTANT_MACROS) \tset(LINK_DIRECTORIES \t\t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(ConfigurationName)) \tset(DEMO_LIBS wxNonGuiPluginBase.lib) endif(WIN32)  set(SRCS ${SRCS} ${HEADERS} \t${PROJECT_ROOT_DIR}\/include\/stdwx.h \t${PROJECT_ROOT_DIR}\/include\/stdwx.cpp)  add_definitions(${PREPROCESSOR_DEFINITIONS})  include_directories(${INCLUDE_DIRECTORIES} ${BASE_INCLUDE_DIRECTORIES} \t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase)  link_directories(${LINK_DIRECTORIES})  add_library(${LIBRARY_NAME} STATIC ${SRCS})  set(DLL_DIR bin) set(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${DLL_DIR}\/${CMAKE_CFG_INTDIR}) set_target_properties(${LIBRARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_LOCATION})  target_link_libraries(${LIBRARY_NAME} ${DEMO_LIBS} ${wxWidgets_LIBRARIES})  add_dependencies(${LIBRARY_NAME} wxNonGuiPluginBase)  set_precompiled_header(${LIBRARY_NAME} ${PROJECT_ROOT_DIR}\/include\/stdwx.h ${PROJECT_ROOT_DIR}\/include\/stdwx.cpp) <\/code><\/pre>\n<p>  \u0418 \u0435\u0449\u0435 \u043d\u0430\u0434\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 wxModularCore \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 CMakeLists.txt:<\/p>\n<p>  <b>build\/CMakeLists.txt<\/b><\/p>\n<pre><code class=\"bash\">... add_subdirectory (..\/wxModularCore \t..\/..\/wxModularCore\/${OS_BASE_NAME}${LIB_SUFFIX}) ... <\/code><\/pre>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0435\u0437 GUI \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/h3>\n<p>  \u0420\u0430\u0437 \u043a\u043b\u0430\u0441\u0441, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438, \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0435-\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <code>wxModularCore<\/code> \u0432 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p>  <b>wxModularHost\/wxModularHostApp.h<\/b><\/p>\n<pre><code class=\"cpp\">... class wxModularHostApp: public wxApp { \tvoid TestNonGuiPlugins(); ... \twxModularCore * m_PluginManager; ... }; <\/code><\/pre>\n<p>  <b>wxModularHost\/wxModularHostApp.cpp<\/b><\/p>\n<pre><code class=\"cpp\">void wxModularHostApp::Init() { \/\/\/\/@begin wxModularHostApp member initialisation \tm_PluginManager = new wxModularCore; \/\/\/\/@end wxModularHostApp member initialisation } <\/code><\/pre>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u0438\u043c\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438:<\/p>\n<p>  <b>wxModularHost\/wxModularHostApp.cpp<\/b><\/p>\n<pre><code class=\"cpp\">bool wxModularHostApp::OnInit() { ... \tTestNonGuiPlugins();  \tMainFrame* mainWindow = new MainFrame( NULL ); \tmainWindow-&gt;Show(true);      return true; }  \/*  * Cleanup for wxModularHostApp  *\/  int wxModularHostApp::OnExit() { \twxDELETE(m_PluginManager); \/\/\/\/@begin wxModularHostApp cleanup \treturn wxApp::OnExit(); \/\/\/\/@end wxModularHostApp cleanup }  void wxModularHostApp::TestNonGuiPlugins() { \tif(m_PluginManager) \t{ \t\tif(m_PluginManager-&gt;LoadPlugins(true)) \t\t{ \t\t\tfor(wxNonGuiPluginBaseList::Node * node = \t\t\t\tm_PluginManager-&gt;GetNonGuiPlugins().GetFirst(); node; node = node-&gt;GetNext()) \t\t\t{ \t\t\t\twxNonGuiPluginBase * plugin = node-&gt;GetData(); \t\t\t\tif(plugin) \t\t\t\t{ \t\t\t\t\twxLogDebug(wxT(&quot;Non-GUI plugin returns %i&quot;), plugin-&gt;Work()); \t\t\t\t} \t\t\t} \t\t} \t} } <\/code><\/pre>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>TestNonGuiPlugins()<\/code> \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>LoadPlugins()<\/code> \u0438\u0437 <code>wxModularCore<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>Work()<\/code> (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u043e\u043d \u0437\u0430\u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 wxNonGuiPluginBase, \u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a).<\/p>\n<h3>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 GUI-\u043f\u043b\u0430\u0433\u0438\u043d<\/h3>\n<p>  \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u0433\u0438\u043a\u0443, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043c\u0435\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u043e:<\/p>\n<p>  <b>wxGuiPluginBase\/wxGuiPluginBase.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &quot;Declarations.h&quot;  class DEMO_API wxGuiPluginBase : public wxObject { \tDECLARE_ABSTRACT_CLASS(wxGuiPluginBase) public: \twxGuiPluginBase(); \tvirtual ~wxGuiPluginBase();  \tvirtual wxString GetName() const = 0; \tvirtual wxString GetId() const = 0; \tvirtual wxWindow * CreatePanel(wxWindow * parent) = 0; };  typedef wxGuiPluginBase * (*CreateGuiPlugin_function)(); typedef void (*DeleteGuiPlugin_function)(wxGuiPluginBase * plugin); <\/code><\/pre>\n<p>  \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:  <\/p>\n<ul>\n<li><code>GetName()<\/code> \u2013 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f<\/li>\n<li><code>GetId()<\/code> \u2013 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f (\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GUID \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432 Visual Studio \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430. \u0421\u043c. \u043c\u0435\u043d\u044e <code>Tools -&gt; Create GUID<\/code>)<\/li>\n<li><code>CreatePanel()<\/code> \u2013 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u0433\u043e.<\/li>\n<\/ul>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:<\/p>\n<p>  <b>SampleGuiPlugin1\/SampleGuiPlugin1.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;wxGuiPluginBase.h&gt;  class SampleGuiPlugin1 : public wxGuiPluginBase { \tDECLARE_DYNAMIC_CLASS(SampleGuiPlugin1) public: \tSampleGuiPlugin1(); \tvirtual ~SampleGuiPlugin1();  \tvirtual wxString GetName() const; \tvirtual wxString GetId() const; \tvirtual wxWindow * CreatePanel(wxWindow * parent); }; <\/code><\/pre>\n<p>  <b>SampleGuiPlugin1\/SampleGuiPlugin1.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;SampleGuiPlugin1.h&quot;  IMPLEMENT_DYNAMIC_CLASS(SampleGuiPlugin1, wxObject)  SampleGuiPlugin1::SampleGuiPlugin1() { }  SampleGuiPlugin1::~SampleGuiPlugin1() { }  wxString SampleGuiPlugin1::GetName() const { \treturn _(&quot;GUI Plugin 1&quot;); }  wxString SampleGuiPlugin1::GetId() const { \treturn wxT(&quot;{4E97DF66-5FBB-4719-AF17-76C1C82D3FE1}&quot;); }  wxWindow * SampleGuiPlugin1::CreatePanel(wxWindow * parent) { \twxWindow * result= new wxPanel(parent, wxID_ANY); \tresult-&gt;SetBackgroundColour(*wxRED); \treturn result; } <\/code><\/pre>\n<p>  CMakeLists.txt \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0442\u043e\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0431\u0435\u0437 GUI. \u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<h3>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u043e\u0434\u0443\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0414\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0431\u0435\u0437 GUI \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0421 \u0442\u0430\u043a\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0418 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 5-10, \u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u044b <code>LoadXXXPlugins()<\/code>, <code>UnloadXXXPlugins()<\/code>, <code>RegisterXXXPlugin()<\/code>, <code>UnRegisterXXXPlugin()<\/code> \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u043c\u0438, \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a \u043a\u043b\u0430\u0441\u0441\u0430 <code>wxModularCore<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u0434, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  <b>wxModularCore\/wxModularCore.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  \/\/ We need to keep the list of loaded DLLs WX_DECLARE_LIST(wxDynamicLibrary, wxDynamicLibraryList);  class wxModularCoreSettings;  class wxModularCore { public: \twxModularCore(); \tvirtual ~wxModularCore();  \tvirtual wxString GetPluginsPath(bool forceProgramPath) const; \tvirtual wxString GetPluginExt();  \tvirtual bool LoadAllPlugins(bool forceProgramPath) = 0; \tvirtual bool UnloadAllPlugins() = 0; \tvirtual void Clear(); protected: \twxDynamicLibraryList m_DllList; \twxModularCoreSettings * m_Settings;  \ttemplate&lt;typename PluginType, \t\ttypename PluginListType&gt; \t\tbool RegisterPlugin(PluginType * plugin, \t\tPluginListType & list) \t{ \t\tlist.Append(plugin); \t\treturn true; \t}  \ttemplate&lt;typename PluginType, \t\ttypename PluginListType, \t\ttypename PluginToDllDictionaryType, \t\ttypename DeletePluginFunctionType&gt; \t\tbool UnRegisterPlugin( \t\t\tPluginType * plugin, \t\t\tPluginListType & container, \t\t\tPluginToDllDictionaryType & pluginMap) \t{ \t\ttypename PluginListType::compatibility_iterator it = \t\t\tcontainer.Find(plugin); \t\tif (it == NULL) \t\t\treturn false;  \t\tdo \t\t{ \t\t\twxDynamicLibrary * dll = (wxDynamicLibrary *)pluginMap[plugin]; \t\t\tif (!dll) \/\/ Probably plugin was not loaded from dll \t\t\t\tbreak;  \t\t\twxDYNLIB_FUNCTION(DeletePluginFunctionType, \t\t\t\tDeletePlugin, *dll); \t\t\tif (pfnDeletePlugin) \t\t\t{ \t\t\t\tpfnDeletePlugin(plugin); \t\t\t\tcontainer.Erase(it); \t\t\t\tpluginMap.erase(plugin); \t\t\t\treturn true; \t\t\t} \t\t} while (false);  \t\t\/\/ If plugin is not loaded from DLL (e.g. embedded into executable) \t\twxDELETE(plugin); \t\tcontainer.Erase(it);  \t\treturn true; \t}  \ttemplate&lt;typename PluginType, \t\ttypename PluginListType, \t\ttypename PluginToDllDictionaryType, \t\ttypename DeletePluginFunctionType&gt; \tbool UnloadPlugins(PluginListType & list, \t\tPluginToDllDictionaryType & pluginDictoonary) \t{ \t\tbool result = true; \t\tPluginType * plugin = NULL; \t\twhile (list.GetFirst() && (plugin = \t\t\tlist.GetFirst()-&gt;GetData())) \t\t{ \t\t\tresult &= UnRegisterPlugin&lt;PluginType, \t\t\t\tPluginListType, \t\t\t\tPluginToDllDictionaryType, \t\t\t\tDeletePluginFunctionType&gt;(plugin, \t\t\t\t\tlist, pluginDictoonary); \t\t} \t\treturn result; \t}  \ttemplate &lt;typename PluginType, \t\ttypename PluginListType, \t\ttypename PluginToDllDictionaryType, \t\ttypename CreatePluginFunctionType&gt; \tbool LoadPlugins(const wxString & pluginsDirectory, \t\tPluginListType & list, \t\tPluginToDllDictionaryType & pluginDictionary, \t\tconst wxString & subFolder) \t{ \t\twxFileName fn; \t\tfn.AssignDir(pluginsDirectory); \t\twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \t\tfn.AppendDir(subFolder); \t\twxLogDebug(wxT(&quot;%s&quot;), fn.GetFullPath().data()); \t\tif (!fn.DirExists()) \t\t\treturn false;  \t\tif(!wxDirExists(fn.GetFullPath())) return false; \t\twxString wildcard = wxString::Format(wxT(&quot;*.%s&quot;), \t\t\tGetPluginExt().GetData()); \t\twxArrayString pluginPaths; \t\twxDir::GetAllFiles(fn.GetFullPath(), \t\t\t&pluginPaths, wildcard); \t\tfor(size_t i = 0; i &lt; pluginPaths.GetCount(); ++i) \t\t{ \t\t\twxString fileName = pluginPaths[i]; \t\t\twxDynamicLibrary * dll = new wxDynamicLibrary(fileName); \t\t\tif (dll-&gt;IsLoaded()) \t\t\t{ \t\t\t\twxDYNLIB_FUNCTION(CreatePluginFunctionType, \t\t\t\t\tCreatePlugin, *dll); \t\t\t\tif (pfnCreatePlugin) \t\t\t\t{ \t\t\t\t\tPluginType * plugin = pfnCreatePlugin(); \t\t\t\t\tRegisterPlugin(plugin, list); \t\t\t\t\tm_DllList.Append(dll); \t\t\t\t\tpluginDictionary[plugin] = dll; \t\t\t\t} \t\t\t\telse \t\t\t\t\twxDELETE(dll); \t\t\t} \t\t} \t\treturn true; \t}  }; <\/code><\/pre>\n<p>  <b>wxModularHost\/SampleModularCore.h<\/b><\/p>\n<pre><code class=\"cpp\">#pragma once  #include &lt;wxModularCore.h&gt; #include &lt;wxNonGuiPluginBase.h&gt; #include &lt;wxGuiPluginBase.h&gt;  \/\/ We need to know which DLL produced the specific plugin object. WX_DECLARE_HASH_MAP(wxNonGuiPluginBase*, wxDynamicLibrary*, \t\t\t\t\twxPointerHash, wxPointerEqual, \t\t\t\t\twxNonGuiPluginToDllDictionary); WX_DECLARE_HASH_MAP(wxGuiPluginBase*, wxDynamicLibrary*, \t\t\t\t\twxPointerHash, wxPointerEqual, \t\t\t\t\twxGuiPluginToDllDictionary); \/\/ And separate list of loaded plugins for faster access. WX_DECLARE_LIST(wxNonGuiPluginBase, wxNonGuiPluginBaseList); WX_DECLARE_LIST(wxGuiPluginBase, wxGuiPluginBaseList);  class SampleModularCore : public wxModularCore { public: \tvirtual ~SampleModularCore(); \tvirtual bool LoadAllPlugins(bool forceProgramPath); \tvirtual bool UnloadAllPlugins();  \tconst wxNonGuiPluginBaseList & GetNonGuiPlugins() const; \tconst wxGuiPluginBaseList & GetGuiPlugins() const; private: \twxNonGuiPluginToDllDictionary m_MapNonGuiPluginsDll; \twxNonGuiPluginBaseList m_NonGuiPlugins; \twxGuiPluginToDllDictionary m_MapGuiPluginsDll; \twxGuiPluginBaseList m_GuiPlugins; }; <\/code><\/pre>\n<p>  <b>wxModularHost\/SampleModularCore.cpp<\/b><\/p>\n<pre><code class=\"cpp\">#include &quot;stdwx.h&quot; #include &quot;SampleModularCore.h&quot; #include &lt;wx\/listimpl.cpp&gt;  WX_DEFINE_LIST(wxNonGuiPluginBaseList); WX_DEFINE_LIST(wxGuiPluginBaseList);  SampleModularCore::~SampleModularCore() { \tClear(); }  bool SampleModularCore::LoadAllPlugins(bool forceProgramPath) { \twxString pluginsRootDir = GetPluginsPath(forceProgramPath); \tbool result = true; \tresult &= LoadPlugins&lt;wxNonGuiPluginBase, \t\twxNonGuiPluginBaseList, \t\twxNonGuiPluginToDllDictionary, \t\tCreatePlugin_function&gt;(pluginsRootDir, \t\tm_NonGuiPlugins, \t\tm_MapNonGuiPluginsDll, \t\twxT(&quot;nongui&quot;)); \tresult &= LoadPlugins&lt;wxGuiPluginBase, \t\twxGuiPluginBaseList, \t\twxGuiPluginToDllDictionary, \t\tCreateGuiPlugin_function&gt;(pluginsRootDir, \t\tm_GuiPlugins, \t\tm_MapGuiPluginsDll, \t\twxT(&quot;gui&quot;)); \t\/\/ You can implement other logic which takes in account \t\/\/ the result of LoadPlugins() calls \treturn true; }  bool SampleModularCore::UnloadAllPlugins() { \treturn \t\tUnloadPlugins&lt;wxNonGuiPluginBase, \t\t\twxNonGuiPluginBaseList, \t\t\twxNonGuiPluginToDllDictionary, \t\t\tDeletePlugin_function&gt;(m_NonGuiPlugins, \t\t\tm_MapNonGuiPluginsDll) && \t\tUnloadPlugins&lt;wxGuiPluginBase, \t\t\twxGuiPluginBaseList, \t\t\twxGuiPluginToDllDictionary, \t\t\tDeleteGuiPlugin_function&gt;(m_GuiPlugins, \t\t\tm_MapGuiPluginsDll); }  const wxNonGuiPluginBaseList & SampleModularCore::GetNonGuiPlugins() const { \treturn m_NonGuiPlugins; }  const wxGuiPluginBaseList & SampleModularCore::GetGuiPlugins() const { \treturn m_GuiPlugins; } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 GUI-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0437\u0430\u043d\u044f\u043b\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 GUI-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<\/h3>\n<p>  \u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0441 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u043c Docking-\u043e\u043a\u043e\u043d \u0438 wxAuiNotebook \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044b \u0438\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432 \u044d\u0442\u043e\u0442 wxAuiNotebook:<br \/>  <b>wxModularHost\/MainFrame.cpp<\/b>  <\/p>\n<pre><code class=\"cpp\">void MainFrame::AddPagesFromGuiPlugins() { \tSampleModularCore * pluginManager = wxGetApp().GetPluginManager(); \tfor(wxGuiPluginBaseList::Node * node = pluginManager-&gt;GetGuiPlugins().GetFirst(); \t\tnode; node = node-&gt;GetNext()) \t{ \t\twxGuiPluginBase * plugin = node-&gt;GetData(); \t\tif(plugin) \t\t{ \t\t\twxWindow * page = plugin-&gt;CreatePanel(m_Notebook); \t\t\tif(page) \t\t\t{ \t\t\t\tm_Notebook-&gt;AddPage(page, plugin-&gt;GetName()); \t\t\t} \t\t} \t} } <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0435 \u043e\u043a\u043d\u043e \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/a7d\/204\/bb5\/a7d204bb58ab003c5192cbe2291301a0.png\" alt=\"image\"\/><\/p>\n<p>  \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 <code>GetName()<\/code> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0441\u0430\u043c\u0438 \u0436\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>CreatePanel()<\/code> \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<h3>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 CMake-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f Linux<\/h3>\n<p>  \u0412 Windows \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <code>RUNTIME_OUTPUT_DIRECTORY<\/code>. \u0412 Linux, \u0442.\u043a. \u043f\u043b\u0430\u0433\u0438\u043d \u2013 \u044d\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>LIBRARY_OUTPUT_DIRECTORY<\/code>. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439: \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u043f\u0430\u043f\u043a\u0438 bin, \u0442\u043e \u043b\u0438\u043d\u043a\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u043f\u0430\u043f\u043a\u0438 bin. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u0438 \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0438 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432):<\/p>\n<p>  <b>SampleGuiPlugin2\/CMakeLists.txt<\/b>  <\/p>\n<pre><code class=\"bash\">... set(DLL_DIR bin) if(LINUX) \tset(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${DLL_DIR}${LIB_SUFFIX}\/plugins\/nongui) else(LINUX) \tset(TARGET_LOCATION ${PROJECT_SOURCE_DIR}\/${DLL_DIR}\/${CMAKE_CFG_INTDIR}\/plugins\/nongui) \tget_target_property(RESULT_FULL_PATH ${LIBRARY_NAME} LOCATION) \tget_filename_component(RESULT_FILE_NAME ${RESULT_FULL_PATH} NAME) endif(LINUX) set_target_properties(${LIBRARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_LOCATION}) ... if(LINUX) \tadd_custom_command(TARGET ${LIBRARY_NAME} POST_BUILD \t\tCOMMAND ${CMAKE_COMMAND} -E make_directory ${TARGET_LOCATION} \t\tCOMMAND ${CMAKE_COMMAND} -E copy $&lt;TARGET_FILE:${LIBRARY_NAME}&gt;  \t\t\t${TARGET_LOCATION}\/${RESULT_FILE_NAME} \t) endif(LINUX) <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432 Linux \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439:<\/p>\n<p>  <b>SampleGuiPlugin2\/CMakeLists.txt<\/b>  <\/p>\n<pre><code class=\"bash\">... if(WIN32) \tset(SRCS ${SRCS} ${LIBRARY_NAME}.def) \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS};\/D_USRDLL;\/D__STDC_CONSTANT_MACROS) \tset(LINK_DIRECTORIES  \t\t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(ConfigurationName)) \tset(DEMO_LIBS wxNonGuiPluginBase.lib) endif(WIN32) if(LINUX) \tset(DEMO_LIBS wxNonGuiPluginBase) endif(LINUX) ... <\/code><\/pre>\n<p>  \u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f. \u041d\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043c \u0447\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f (\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0439 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0443\u0436\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f).<br \/>  \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0432\u043d\u0443\u0442\u0440\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b ldd:<\/p>\n<pre><code class=\"bash\">ldd libSampleGuiPlugin2.so | grep wxSampleGuiPluginBase <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439, \u0432 CMake \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u044e <code>RPATH<\/code> \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<p>  <b>SampleGuiPlugin2\/CMakeLists.txt<\/b>  <\/p>\n<pre><code class=\"bash\">if(WIN32) \tset(SRCS ${SRCS} ${LIBRARY_NAME}.def) \tset(PREPROCESSOR_DEFINITIONS ${PREPROCESSOR_DEFINITIONS};\/D_USRDLL;\/D__STDC_CONSTANT_MACROS) \tset(LINK_DIRECTORIES  \t\t${PROJECT_ROOT_DIR}\/wxNonGuiPluginBase\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(ConfigurationName)) \tset(DEMO_LIBS wxNonGuiPluginBase.lib) endif(WIN32) if(LINUX) \tset(DEMO_LIBS wxNonGuiPluginBase) \tSET(CMAKE_SKIP_BUILD_RPATH  FALSE) \tSET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)  \tSET(CMAKE_INSTALL_RPATH &quot;.:.\/..\/..\/&quot;) endif(LINUX) <\/code><\/pre>\n<p>  \u0422.\u043a. \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 plugins\/gui, \u0442\u043e \u0431\u0438\u0431\u0438\u043e\u0442\u0435\u043a\u0443 wxGuiPluginBase \u043d\u0430\u0434\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0434\u0432\u0430 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u044b\u0448\u0435, \u0447\u0442\u043e \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 CMakeLists.txt<\/p>\n<h3>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 CMake-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f OS X<\/h3>\n<p>  \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 Linux, \u0432 OS X \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0443 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0412 OS X \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u0439 \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 install_name_tool.<br \/>  \u0414\u043e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0432 CMakeLists.txt, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0443\u0442\u0438 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435:<\/p>\n<p>  <b>SampleGuiPlugin2\/CMakeLists.txt<\/b>  <\/p>\n<pre><code class=\"bash\">if(APPLE) \tFOREACH(DEP_LIB ${DEMO_LIBS}) \t\tget_filename_component(ABS_ROOT_DIR ${PROJECT_ROOT_DIR} ABSOLUTE) \t\tset(LIBNAME_FULL &quot;${ABS_ROOT_DIR}\/${DEP_LIB}\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(CONFIGURATION)\/lib${DEP_LIB}.dylib&quot;)                 add_custom_command(TARGET ${LIBRARY_NAME} POST_BUILD                 \tCOMMAND install_name_tool -change &quot;${LIBNAME_FULL}&quot;  \t\t\t\t\t\t&quot;@executable_path\/..\/Frameworks\/lib${DEP_LIB}.dylib&quot;  \t\t\t\t\t\t$&lt;TARGET_FILE:${LIBRARY_NAME}&gt;)         ENDFOREACH(DEP_LIB) endif(APPLE) <\/code><\/pre>\n<p>  \u0412 CMake-\u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438<\/p>\n<p>  <b>wxModularHost\/CMakeLists.txt<\/b>  <\/p>\n<pre><code class=\"bash\">if(APPLE) \tFOREACH(DEP_LIB ${DEMO_LIBS_SHARED}) \t\tget_filename_component(ABS_ROOT_DIR ${PROJECT_ROOT_DIR} ABSOLUTE) \t\tset(LIBNAME_FULL &quot;${ABS_ROOT_DIR}\/${DEP_LIB}\/${OS_BASE_NAME}${LIB_SUFFIX}\/$(CONFIGURATION)\/lib${DEP_LIB}.dylib&quot;)                 add_custom_command(TARGET ${EXECUTABLE_NAME} POST_BUILD                 \tCOMMAND install_name_tool -change &quot;${LIBNAME_FULL}&quot; &quot;@executable_path\/..\/Frameworks\/lib${DEP_LIB}.dylib&quot; $&lt;TARGET_FILE:${EXECUTABLE_NAME}&gt;)         ENDFOREACH(DEP_LIB) endif(APPLE) <\/code><\/pre>\n<h3>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f Windows \u0438 OS X Makefile \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d.<br \/>  \u041f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 GitHub: <a href=\"https:\/\/github.com\/T-Rex\/wxModularApp\" title=\"\u041a\u0440\u043e\u0441\u0441-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043d\u0430 wxWidgets\">https:\/\/github.com\/T-Rex\/wxModularApp<\/a><\/p>\n<p>  PS: \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b\u0448\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f wxWidgets (3.0), \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 CMake \u0435\u0449\u0435 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0434\u043b\u044f 2.9.x \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441 3.0. \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 \u0432\u0435\u0442\u043a\u0438 2.9: <a href=\"http:\/\/svn.wxwidgets.org\/svn\/wx\/wxWidgets\/tags\/WX_2_9_5\/\">svn.wxwidgets.org\/svn\/wx\/wxWidgets\/tags\/WX_2_9_5\/<\/a>    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/203322\/\"> http:\/\/habrahabr.ru\/post\/203322\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0423\u0436\u0435 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043f\u0438\u0448\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0445\u043e\u0442\u044f \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043c\u044b\u0441\u043b\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<p>  \u0418 \u0432\u043e\u0442, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0436\u0438\u0437\u043d\u044c \u0438 \u0434\u0430\u0441\u0442 \u0442\u043e\u043b\u0447\u043e\u043a \u043a \u043f\u043e\u043a\u043e\u0440\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043d\u0430 C++ \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 wxWidgets. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Windows, Linux \u0438 OS X, \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u041a\u043e\u043c\u0443-\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f), \u043d\u043e, \u0432\u0441\u0435 \u0436\u0435, \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439, \u0438\u0431\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-203322","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/203322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=203322"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/203322\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=203322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=203322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=203322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}