首页 > 解决方案 > 如何让 Eclipse CDT 在 Windows 下与 WxWidgets 一起工作?

问题描述

多年来,我一直使用 Eclipse 开发 PHP、Python、JavaScript 和 lua。然而,我是 C++ 和 Eclipse CDT 的新手。我对 C++ 语法和约定有了足够的把握,我准备继续讨论我使用 C++ 的原因,即 GUI。起初我尝试了 Code::Blocks,它看起来更简单(我喜欢向导!),但我真的更喜欢带有 git 集成的 IDE,并且在我设法让编译工作之前我意识到 C::B 没有它。所以,回到 Eclipse。

到目前为止,我已经完成了以下工作:

不幸的是,这就是我卡住的地方。那里有很多教程和论坛帖子,但我遇到了以下一个或多个问题:

或者,我会推荐另一个 GUI 工具包,该工具包具有可访问的说明,可让当前版本的自身与当前版本的 Eclipse 一起工作。

标签: wxwidgetseclipse-cdt

解决方案


我将展示如何使用 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,点击完成按钮。

在此处输入图像描述

现在向项目中添加一个文件。你可以

  1. 选择 File->New->Source File,输入文件的名称,例如“minimal.cpp”或任何您想调用的名称,然后点击完成。新文件将在 eclipse 中自动打开。选择并删除全部内容。在文本编辑器中,打开文件 WXWIN\samples\minimal\minimal.cpp,选择并复制全部内容,粘贴到刚刚在 eclipse 中创建的文件中,然后保存文件。
  2. 文件->导入->常规->文件系统。单击下一步按钮。然后为目录选择 \samples\minimal。然后从出现的文件列表中选择文件 minimum.cpp。最后点击完成按钮。

无论哪种方式,现在项目中都应该有一个名为 minimum.cpp 的文件。要构建此文件,需要更改几个设置。从菜单中,选择 Project->Properties->C/C++ Build->Settings

  • 对于 GCC C++ 编译器:

    • 对于预处理器,
      • 对于所有配置,添加__WXMSW___UNICODEHAVE_W32API_HNOPCH.
      • 对于发布配置添加NDEBUG 在此处输入图像描述
    • 对于包括
      • 对于所有配置,添加${WXWIN}\include
      • 对于调试配置,添加${WXWIN}\lib\gcc_lib\mswud
      • 对于发布配置添加${WXWIN}\lib\gcc_lib\mswu
    • 优化
      • 对于发布配置选择Optimize more (-O2)
    • 用于调试
      • 对于调试配置,选择调试级别Default (-g)
    • 杂项
      • 对于所有配置,-mthreads -W -Wno-ctor-dtor-privacy请在“其他标志”框的末尾添加。
  • 对于 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只是不支持构建资源文件,所以我们需要手动处理。

  1. 将文件 WXWIN\samples\sample.rc 和 WXWIN\samples\sample.ico 复制到项目文件夹中。(项目文件夹是包含之前创建的 minimum.cpp 文件的文件夹)。或者,您可以使用 File->Import-> ... 将文件导入项目。
  2. 现在返回 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 在此处输入图像描述
  3. 接下来切换回工具设置选项卡:

    • 对于 MinGW C++ 链接器:
      • 对于杂项,
        • 适用于所有配置
          • 对于其他对象,添加${CWD}\minimal_sample_rc.o 在此处输入图像描述

这 2 个额外的步骤将使 eclipse 编译资源文件并将资源链接到最终的可执行文件中。


推荐阅读