wxwidgets - 如何让 Eclipse CDT 在 Windows 下与 WxWidgets 一起工作?
问题描述
- wxWidgets-3.1.3
- Eclipse IDE 4.14.0
- Eclipse CDT 9.10.0.2019x(截至 2020 年 2 月 2 日的最新软件包)
- MinGW 编译器,通过 MSYS2 安装
- 视窗 10 专业版
多年来,我一直使用 Eclipse 开发 PHP、Python、JavaScript 和 lua。然而,我是 C++ 和 Eclipse CDT 的新手。我对 C++ 语法和约定有了足够的把握,我准备继续讨论我使用 C++ 的原因,即 GUI。起初我尝试了 Code::Blocks,它看起来更简单(我喜欢向导!),但我真的更喜欢带有 git 集成的 IDE,并且在我设法让编译工作之前我意识到 C::B 没有它。所以,回到 Eclipse。
到目前为止,我已经完成了以下工作:
- 将 MinGW 编译器路径添加到 %PATH%
- 使用 SHARED=0 UNICODE=1 MONOLITHIC=0 BUILD=release 成功编译 wxWidgets 3.1.3,这些更改在 %WXDIR%\build\msw\config.gcc 中进行。我发现的各种教程在这些参数上大相径庭,但是在这里和其他论坛上对我的问题的人们的各种回应都普遍同意它们,除了 BUILD,它们是默认值。所以。
- 从samples/minimal成功编译了一个测试程序。生成的可执行文件不需要同一目录中的任何其他 DLL 即可运行。
不幸的是,这就是我卡住的地方。那里有很多教程和论坛帖子,但我遇到了以下一个或多个问题:
- 新手无法访问。“添加指向您的 wxWidgets 目录的链接”但是好的,我该怎么做,您是指主要的 %WXDIR% 代码目录还是 %WXDIR%\lib 还是什么?
- 不要工作。“只是文件->导入->文件系统->%WXDIR%”,不。实际上,是否摆脱了从“minimal.cpp”粘贴的代码中某些引用的“未解决”,但不是全部。
- 明确引用十年前的 IDE 或代码版本,和/或包含当前版本无法遵循的说明。
或者,我会推荐另一个 GUI 工具包,该工具包具有可访问的说明,可让当前版本的自身与当前版本的 Eclipse 一起工作。
解决方案
我将展示如何使用 MinGW 和 eclipse 编译 wxWidgets 最小示例。首先,我强烈建议您构建 wxWidgets 库的调试版本和发布版本。这些方向将假设是这种情况。我不是 eclipse 的专家,所以我不能保证这些是最好的方向。这些方向确实对我有用,但欢迎更正和改进。
这里有很多很多步骤。但是,如果您获得了一个包含最少示例的工作项目,您可以复制该项目并更改代码文件以将其用于进一步的项目。
在我们做任何其他事情之前,WXWIN
如果尚未定义环境变量,请在 eclipse 中定义它。从菜单中选择 Window->Preferences->C/C++->Build->Environment,然后按添加按钮添加变量。
构建库附带的最小示例的最简单方法是使用命令行。为此,只需切换到 WXWIN\samples\minimal 文件夹并输入与构建库完全相同的命令。由于上面给出的命令是mingw32-make -f makefile.gcc SHARED=0 UNICODE=1 MONOLITHIC=0 BUILD=release
,如果在 shell 中执行以下命令,就会出现这种情况:
windres --use-temp-file -i../../samples/sample.rc -ogcc_mswu\minimal_sample_rc.o --define __WXMSW__ --define NDEBUG --define _UNICODE --include-dir .\..\..\lib\gcc_lib\mswu --include-dir ./../../include --include-dir . --include-dir ./../../samples --define NOPCH
g++ -c -o gcc_mswu\minimal_minimal.o -O2 -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -I.\..\..\lib\gcc_lib\mswu -I.\..\..\include -W -Wall -I. -I.\..\..\samples -DNOPCH -Wno-ctor-dtor-privacy -MTgcc_mswu\minimal_minimal.o -MFgcc_mswu\minimal_minimal.o.d -MD -MP minimal.cpp
g++ -o gcc_mswu\minimal.exe @gcc_mswu\minimal.exe.rsp -mthreads -L.\..\..\lib\gcc_lib -Wl,--subsystem,windows -mwindows -lwxmsw31u_core -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc -luxtheme
如果我们用相同的命令build=debug
代替,我们会得到相似的命令,只有一些区别:
windres --use-temp-file -i../../samples/sample.rc -ogcc_mswud\minimal_sample_rc.o --define __WXMSW__ --define _UNICODE --include-dir .\..\..\lib\gcc_lib\mswud --include-dir ./../../include --include-dir . --include-dir ./../../samples --define NOPCH
g++ -c -o gcc_mswud\minimal_minimal.o -g -O0 -mthreads -DHAVE_W32API_H -D__WXMSW__ -D_UNICODE -I.\..\..\lib\gcc_lib\mswud -I.\..\..\include -W -Wall -I. -I.\..\..\samples -DNOPCH -Wno-ctor-dtor-privacy -MTgcc_mswud\minimal_minimal.o -MFgcc_mswud\minimal_minimal.o.d -MD -MP minimal.cpp
g++ -o gcc_mswud\minimal.exe @gcc_mswud\minimal.exe.rsp -g -mthreads -L.\..\..\lib\gcc_lib -Wl,--subsystem,windows -mwindows -lwxmsw31ud_core -lwxbase31ud -lwxtiffd -lwxjpegd -lwxpngd -lwxzlibd -lwxregexud -lwxexpatd -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet -loleacc -luxtheme
要使用 eclipse 构建示例,我们希望它执行大致相同的命令,以解决调试和发布配置之间的细微差别。选择 File->New->C/C++ project->C++ Managed Build。输入项目名称,选择MinGW GCC,确保项目类型为Executable/Empty project,点击完成按钮。
现在向项目中添加一个文件。你可以
- 选择 File->New->Source File,输入文件的名称,例如“minimal.cpp”或任何您想调用的名称,然后点击完成。新文件将在 eclipse 中自动打开。选择并删除全部内容。在文本编辑器中,打开文件 WXWIN\samples\minimal\minimal.cpp,选择并复制全部内容,粘贴到刚刚在 eclipse 中创建的文件中,然后保存文件。
- 文件->导入->常规->文件系统。单击下一步按钮。然后为目录选择 \samples\minimal。然后从出现的文件列表中选择文件 minimum.cpp。最后点击完成按钮。
无论哪种方式,现在项目中都应该有一个名为 minimum.cpp 的文件。要构建此文件,需要更改几个设置。从菜单中,选择 Project->Properties->C/C++ Build->Settings
对于 GCC C++ 编译器:
对于 MinGW C++ 链接器:
- 对于图书馆,
- 对于调试配置:
- 对于库,添加
wxmsw31ud_core
,wxbase31ud
,wxtiffd
,wxjpegd
,wxpngd
,wxzlibd
,wxregexud
, 和wxexpatd
- 对于库,添加
- 对于发布配置:
- 对于库,添加以下所有内容:
wxmsw31u_core
,wxbase31u
,wxtiff
,wxjpeg
,wxpng
,wxzlib
,wxregexu
, 和wxexpat
- 对于库,添加以下所有内容:
- 适用于所有配置
- 对于库,添加以下所有内容:
kernel32
,user32
,gdi32
,comdlg32
,winspool
,winmm
,shell32
,shlwapi
,comctl32
,ole32
,oleaut32
,uuid
,rpcrt4
,advapi32
,version
,wsock32
,wininet
,oleacc
, 和uxtheme
. - 对于图书馆搜索路径,添加
${WXWIN}\lib\gcc_lib
- 对于库,添加以下所有内容:
- 注意:对于 MinGW,库的顺序有时很重要,应该首先列出与调试和发布配置一起使用的名称以“wx”开头的库。如有必要,您可以使用向上和向下箭头重新排列顺序。
- 对于调试配置:
- 对于杂项,
- 适用于所有配置
- 对于喜欢的标志,添加
-mthreads -mwindows
- 对于其他选项 (-Xlinker),添加
--subsystem=windows
.
- 对于喜欢的标志,添加
- 对于调试配置,
- 对于喜欢的标志,添加
-g
到现有内容。
- 对于喜欢的标志,添加
- 适用于所有配置
- 对于图书馆,
现在将构建调试和发布配置,但应用程序尚未完成。在命令提示符下构建最小应用程序的第一件事是
windres --use-temp-file ...
根据这个链接,eclipse只是不支持构建资源文件,所以我们需要手动处理。
- 将文件 WXWIN\samples\sample.rc 和 WXWIN\samples\sample.ico 复制到项目文件夹中。(项目文件夹是包含之前创建的 minimum.cpp 文件的文件夹)。或者,您可以使用 File->Import-> ... 将文件导入项目。
现在返回 Project->Properties->C/C++ Build->Settings->Build Steps。
- 对于预构建步骤
- 对于调试配置,输入
windres --use-temp-file -i"${ProjDirPath}/sample.rc" -o"${CWD}\minimal_sample_rc.o" --define __WXMSW__ --define _UNICODE --include-dir ${WXWIN}\lib\gcc_lib\mswud --include-dir ${WXWIN}\include --define NOPCH
- 对于发布配置输入
windres --use-temp-file -i"${ProjDirPath}\sample.rc" -o${CWD}\minimal_sample_rc.o --define __WXMSW__ --define NDEBUG --define _UNICODE --include-dir ${WXWIN}\lib\gcc_lib\mswu --include-dir ${WXWIN}\include --define NOPCH
- 对于调试配置,输入
- 对于预构建步骤
接下来切换回工具设置选项卡:
这 2 个额外的步骤将使 eclipse 编译资源文件并将资源链接到最终的可执行文件中。
推荐阅读
- python - 如果满足某个条件,则在 python 函数中应用另一个公式
- java - 在关键代码语句中未实现日志记录时更好的调试方法
- javascript - 通过加速或减速平稳减少数量
- python - 有没有办法让两种不同语言的内核在同一个 Jupyter 笔记本上运行?
- reactjs - 使 redux 与 redux-thunk 动作同步
- python - 使用 Pytest 的参数化添加测试内容的描述
- javascript - 即使我没有直接改变状态,Vuex 商店中的突变错误
- typescript - 有没有办法从它的属性中推断出一个泛型参数?
- node.js - 在 Heroku 中处理 Nodejs 崩溃
- android - 带有 awsconfiguration.json 的源集