1

我感觉有点笨,但我无法构建新的 wxWidgets。我想使用codelite + mingw + wxWidgets,所以我下载了最新版本:

CodeLite 9.1.3 ( http://downloads.codelite.org/downloads.php?windows_weekly_64 )

安装程序让我下载 TDM-GCC-64 设置并安装它。

然后我下载了 wxWidgets-3.1.0 ( https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.0/wxMSW-3.1.0-Setup.exe )

Codelite 检测到编译器,现在我应该构建 wxWidgets,但是我搜索过的页面(wxW wiki、codelite 文档等)指的是不存在的文件夹和文件。一切都安装在默认文件夹中,我不是 PC 菜鸟,虽然可能太习惯于 C++Builder 等环境。

我现在该怎么办?


更新

对不起,我无法说清楚。让我再试一次输出:

C:\wxWidgets-3.1.0\build\msw>mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLITHIC=1
if not exist gcc_mswudll mkdir gcc_mswudll
if not exist ..\..\lib\gcc_dll mkdir ..\..\lib\gcc_dll
if not exist ..\..\lib\gcc_dll\mswu\wx\setup.h copy ..\..\include\wx\msw\setup.h ..\..\lib\gcc_dll\mswu\wx\setup.h
gcc -c -o gcc_mswudll\wxregex_regcomp.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\include -I..\..\lib\gcc_dll\mswu -D__WXMSW__  -D_UNICODE   -MTgcc_mswudll\wxregex_regcomp.o -MFgcc_mswudll\wxre
gex_regcomp.o.d -MD -MP ../../src/regex/regcomp.c
Impossibile trovare il percorso specificato.
        0 file copiati.
Makefile.gcc:5728: recipe for target '..\..\lib\gcc_dll\mswu\wx\setup.h' failed
mingw32-make: *** [..\..\lib\gcc_dll\mswu\wx\setup.h] Error 1
mingw32-make: *** Waiting for unfinished jobs....
In file included from ..\..\include/wx/defs.h:20:0,
                 from ../../src/regex/regcustom.h:39,
                 from ../../src/regex/regguts.h:38,
                 from ../../src/regex/regcomp.c:33:
..\..\include/wx/platform.h:136:22: fatal error: wx/setup.h: No such file or directory
 #include "wx/setup.h"
                      ^
compilation terminated.
Makefile.gcc:5778: recipe for target 'gcc_mswudll\wxregex_regcomp.o' failed
mingw32-make: *** [gcc_mswudll\wxregex_regcomp.o] Error 1

我可能错了,但在我看来这两行

if not exist ..\..\lib\gcc_dll mkdir ..\..\lib\gcc_dll
if not exist ..\..\lib\gcc_dll\mswu\wx\setup.h copy ..\..\include\wx\msw\setup.h ..\..\lib\gcc_dll\mswu\wx\setup.h

说明有问题。

现在,我自己创建了目录并将 setup.h 复制进去。在我家它还没有在构建,但我不记得为什么,而现在,在办公室,它开始构建,但以这个结束:

......
g++ -c -o gcc_mswudll\wxscintilla_LexCOBOL.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -DSCI_LE
XER -DLINK_LEXERS -I..\..\lib\gcc_dll\mswu -I..\..\include  -D__WXMSW__   -D_UNICODE    -fno-keep-inline-dllexport -std=c++11 -MTgcc_mswudll\wxscintilla_LexCOBOL.o -MFgcc_mswudll\wxscintilla_LexCOBOL.
o.d -MD -MP ../../src/stc/scintilla/lexers/LexCOBOL.cxx
In file included from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\cmath:44:0,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\random:38,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_algo.h:65,
                 from c:\sviluppo\tools\mingw\lib\gcc\mingw32\4.8.1\include\c++\algorithm:62,
                 from ../../src/stc/scintilla/lexers/LexBibTeX.cxx:18:
c:\sviluppo\tools\mingw\include\math.h: In function 'float hypotf(float, float)':
c:\sviluppo\tools\mingw\include\math.h:635:30: error: '_hypot' was not declared in this scope
 { return (float)(_hypot (x, y)); }
                              ^
g++ -c -o gcc_mswudll\wxscintilla_LexCoffeeScript.o  -O2 -mthreads  -DHAVE_W32API_H -DNDEBUG -I..\..\src\stc\scintilla\include -I..\..\src\stc\scintilla\lexlib -I..\..\src\stc\scintilla\src -D__WX__ -
DSCI_LEXER -DLINK_LEXERS -I..\..\lib\gcc_dll\mswu -I..\..\include  -D__WXMSW__   -D_UNICODE    -fno-keep-inline-dllexport -std=c++11 -MTgcc_mswudll\wxscintilla_LexCoffeeScript.o -MFgcc_mswudll\wxscint
illa_LexCoffeeScript.o.d -MD -MP ../../src/stc/scintilla/lexers/LexCoffeeScript.cxx
Makefile.gcc:6183: recipe for target 'gcc_mswudll\wxscintilla_LexBibTeX.o' failed
mingw32-make: *** [gcc_mswudll\wxscintilla_LexBibTeX.o] Error 1
mingw32-make: *** Waiting for unfinished jobs....

C:\wxWidgets-3.1.0\build\msw>

所以,我们仍然没有构建 wxWidgets。


更新

尝试按照答案中的建议进行调试构建。这是输出:

C:\wxWidgets-3.1.0\build\msw> mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=
1 BUILD=debug VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLIT
HIC=1
if not exist gcc_mswuddll mkdir gcc_mswuddll
if not exist ..\..\lib\gcc_dll\mswud mkdir ..\..\lib\gcc_dll\mswud
if not exist ..\..\lib\gcc_dll\mswud\wx\setup.h copy ..\..\include\wx\msw\setup.
h ..\..\lib\gcc_dll\mswud\wx\setup.h
gcc -c -o gcc_mswuddll\wxregex_regcomp.o -g -O0 -mthreads  -DHAVE_W32API_H -DNDE
BUG -I..\..\include -I..\..\lib\gcc_dll\mswud -D__WXMSW__  -D_UNICODE   -MTgcc_m
swuddll\wxregex_regcomp.o -MFgcc_mswuddll\wxregex_regcomp.o.d -MD -MP ../../src/
regex/regcomp.c
Impossibile trovare il percorso specificato.
        0 file copiati.
Makefile.gcc:5728: recipe for target '..\..\lib\gcc_dll\mswud\wx\setup.h' failed

mingw32-make: *** [..\..\lib\gcc_dll\mswud\wx\setup.h] Error 1
mingw32-make: *** Waiting for unfinished jobs....
In file included from ..\..\include/wx/defs.h:20:0,
                 from ../../src/regex/regcustom.h:39,
                 from ../../src/regex/regguts.h:38,
                 from ../../src/regex/regcomp.c:33:
..\..\include/wx/platform.h:136:22: fatal error: wx/setup.h: No such file or dir
ectory
compilation terminated.
Makefile.gcc:5778: recipe for target 'gcc_mswuddll\wxregex_regcomp.o' failed
mingw32-make: *** [gcc_mswuddll\wxregex_regcomp.o] Error 1

文件在那里,所以我不知道是什么问题......

C:\wxWidgets-3.1.0\build\msw>dir ..\..\src\regex\regcomp.*
 Il volume nell'unità C è 1TBWD-1-WIN7 64
 Numero di serie del volume: A26D-1E3B

 Directory di C:\wxWidgets-3.1.0\src\regex

28/02/2016  22:33            59.702 regcomp.c
               1 File         59.702 byte
               0 Directory  74.986.561.536 byte disponibili

C:\wxWidgets-3.1.0\build\msw>
4

4 回答 4

1

安装程序让我下载 TDM-GCC-64 设置并安装它。

CodeLite 建议...

我现在该怎么办?

像这样构建 wxWidgets:

构建 wxWidgets 后,您需要在 CodeLite 中设置 2 个环境变量:(Settings->Environment variables):

WXCFG=gcc_dll\mswu WXWIN=\path\to\wxWidgets

如果您尝试在 CodeLite 中构建项目的配置Debug,您应该执行以下操作之一:

构建一个debugwxWidgets 版本(这是 CodeLite 将搜索的内容)

或者

从编译器和链接器选项中删除--debug标志:

  1. Project Settings->Compiler->C++ Compiler Options,并删除说--debug=yes或只是--debug
  2. 项目设置->链接器->链接器选项,并删除说--debug=yes或只是--debug

编辑:更新 CodeLite 的 wiki 页面链接

EDIT2:PATH在答案中添加了说明

EDIT3:添加了有关如何设置环境变量 WXCFG 和 WXWIN 的说明

伊兰

于 2016-03-07T07:04:17.510 回答
1

至于今天,构建忘记制作两个目录。解决方案是在构建之前自己制作它们。

所以我的解决方案是去你的 wxWidget 文件夹并输入:

C:\wxWidgets-3.1.0>mkdir lib\gcc_dll\mswu\wx\
C:\wxWidgets-3.1.0>copy include\wx\msw\setup.h lib\gcc_dll\mswu\wx\setup.h
于 2016-03-08T01:36:25.517 回答
1

makefile.gcc使用并行 make(即 with -j8)时存在错误。一种解决方法是

mingw32-make <all the same options> setup_h

首先是正常的 make 命令。另一种选择是使用不受此问题影响的基于配置的构建。

编译问题是由于编译器错误造成的,我们已尝试在此提交_hypot()中解决它,但显然这还不够。您应该使用更多详细信息报告问题,包括您使用的编译器版本和传递给 make 的选项。

于 2016-03-08T12:21:39.507 回答
0

使用此命令我遇到了类似的问题

mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLITHIC=1

问题是 -j8在构建过程开始之前考虑物理处理器的数量。

尝试-jN(将 N 替换为 的值NUMBER_OF_PROCESSORS

mingw32-make 看物理处理器的实际数量,不考虑超线程或虚拟处理器。但是,如果您的机器分配的物理处理器数量少于分配的物理处理器,则会导致错误。

您也可以尝试将-j其放入 make arguments 字段。这告诉 Make 如果你有足够的 RAM 和 CPU 来处理它,它会产生尽可能多的编译进程,它应该比单个编译更快。

我在具有4 个物理处理器的 i7 上成功尝试了-j4 。

(注意:开启超线程时,i7 显示8个虚拟处理器)

东方在这里提到了类似的东西

这里提到了 Brendan Shanks 的更好解释。

于 2017-09-05T17:07:03.283 回答