首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mingw-w64编译cpputest

使用mingw-w64编译cpputest
EN

Stack Overflow用户
提问于 2019-12-03 00:18:42
回答 1查看 580关注 0票数 2

我正在尝试用mingw-w64编译cpputest,但是不能让它工作,我也找不到任何关于如何做到这一点的资源。因此,希望这个问题能在未来对其他人有所帮助。

我想使用mingw-w64编译cpputest,最好不要安装MSYS2或其他包。

我安装了mingw-w64i686-8.1.0-posix-dwarf-rt_v6-rev0。我已经从here克隆了cpputest。

我尝试使用以下命令调用CMake来跟踪Compiling Google test with Mingw-w64Compiling and using CppUTest 3.8 under MSYS2/MinGW32

代码语言:javascript
复制
cmake ^
    -G "MinGW Makefiles" ^
    -D CMAKE_C_COMPILER=gcc.exe ^
    -D CMAKE_CXX_COMPILER=g++.exe ^
    -D CMAKE_MAKE_PROGRAM=mingw32-make.exe ^
    -D C++11=ON ^
    .

这会产生:

代码语言:javascript
复制
-------------------------------------------------------
CppUTest Version 3.8

Current compiler options:
    CC:                                 C:/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc.exe
    CXX:                                C:/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/g++.exe
    CppUTest CFLAGS:                     -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorMallocMacros.h"  -Wall -Wextra -pedantic -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -Wsign-conversion -Wno-padded -Wno-long-long -Wstrict-prototypes
    CppUTest CXXFLAGS:                   -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorNewMacros.h" -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorMallocMacros.h"    -Wall -Wextra -pedantic -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -Wsign-conversion -Wno-padded -Wno-long-long -Woverloaded-virtual -Wno-old-style-cast -Wno-c++14-compat
    CppUTest LDFLAGS:

Features configured in CppUTest:
    Memory Leak Detection:              ON
    Compiling Extensions:               ON
    Support Long Long:                  OFF
    Use CppUTest flags:                 ON

    Using Standard C library:           ON
    Using Standard C++ library:         ON
    Using C++11 library:                ON

    Generating map file:                OFF
    Compiling with coverage:            OFF

    Compile and run self-tests          ON
    Run self-tests separately           OFF

-------------------------------------------------------

运行make失败,并显示以下错误:

代码语言:javascript
复制
>mingw32-make.exe
Scanning dependencies of target CppUTest
[  1%] Building CXX object src/CppUTest/CMakeFiles/CppUTest.dir/CommandLineArguments.cpp.obj
In file included from C:/git/tdd/cpputest/include/CppUTest/Utest.h:34,
                 from C:/git/tdd/cpputest/include/CppUTest/TestHarness.h:39,
                 from C:\git\tdd\cpputest\src\CppUTest\CommandLineArguments.cpp:29:
C:/git/tdd/cpputest/include/CppUTest/SimpleString.h:183:31: error: 'nullptr_t' does not name a type
 SimpleString StringFrom(const nullptr_t value);
                               ^~~~~~~~~
C:/git/tdd/cpputest/include/CppUTest/SimpleString.h:183:31: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
C:/git/tdd/cpputest/include/CppUTest/SimpleString.h:42:1:
+#include <cstddef>

C:/git/tdd/cpputest/include/CppUTest/SimpleString.h:183:31:
 SimpleString StringFrom(const nullptr_t value);
                               ^~~~~~~~~
mingw32-make.exe[2]: *** [src\CppUTest\CMakeFiles\CppUTest.dir\build.make:63: src/CppUTest/CMakeFiles/CppUTest.dir/CommandLineArguments.cpp.obj] Error 1
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:886: src/CppUTest/CMakeFiles/CppUTest.dir/all] Error 2
mingw32-make.exe: *** [Makefile:140: all] Error 2

我尝试了一个显而易见的解决方案,将cstddef添加到SimpleString.h中:

代码语言:javascript
复制
--- a/include/CppUTest/SimpleString.h                                                
+++ b/include/CppUTest/SimpleString.h                                                
@@ -180,6 +180,9 @@ SimpleString BracketsFormattedHexString(SimpleString hexString); 
  * Specifically nullptr_t is not officially supported                               
  */                                                                                 
 #if __cplusplus > 199711L && !defined __arm__                                       
+                                                                                    
+#include <cstddef>                                                                  
+                                                                                    
 SimpleString StringFrom(const nullptr_t value);                                     
 #endif                                                                              

但这仍然会失败,并出现相同的错误。

所以我试着跟着Build error with CMake and MSYS2 mingw-w64安装MSYS2,然后安装了mingw-w64,CMake和忍者。这给了我们:

代码语言:javascript
复制
-------------------------------------------------------
CppUTest Version 3.8

Current compiler options:
    CC:                                 C:/msys64/mingw64/bin/cc.exe
    CXX:                                C:/msys64/mingw64/bin/c++.exe
    CppUTest CFLAGS:                     -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorMallocMacros.h"  -Wall -Wextra -pedantic -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -Wsign-conversion -Wno-padded -Wno-long-long -Wstrict-prototypes
    CppUTest CXXFLAGS:                   -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorNewMacros.h" -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorMallocMacros.h"  -Wall -Wextra -pedantic -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -Wsign-conversion -Wno-padded -Wno-long-long -Woverloaded-virtual -Wno-old-style-cast
    CppUTest LDFLAGS:

Features configured in CppUTest:
    Memory Leak Detection:              ON
    Compiling Extensions:               ON
    Support Long Long:                  OFF
    Use CppUTest flags:                 ON

    Using Standard C library:           ON
    Using Standard C++ library:         ON
    Using C++11 library:                OFF

    Generating map file:                OFF
    Compiling with coverage:            OFF

    Compile and run self-tests          ON
    Run self-tests separately           OFF

-------------------------------------------------------

使用cmake -G Ninja . && ninja编译失败,出现以下错误:

代码语言:javascript
复制
include/CppUTest/SimpleString.h:183:31:
 SimpleString StringFrom(const nullptr_t value);
                               ^~~~~~~~~
[10/98] Building CXX object src/CppUTest/CMakeFiles/CppUTest.dir/TestMemoryAllocator.cpp.obj
FAILED: src/CppUTest/CMakeFiles/CppUTest.dir/TestMemoryAllocator.cpp.obj
C:\msys64\mingw64\bin\c++.exe  -DCPPUTEST_HAVE_STRDUP=1 -DHAVE_CONFIG_H -D_TIMESPEC_DEFINED=1 -I. -Iinclude -Isrc/CppUTest/../../include -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorNewMacros.h" -include "C:/git/tdd/cpputest/include/CppUTest/MemoryLeakDetectorMallocMacros.h"  -Wall -Wextra -pedantic -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -Wsign-conversion -Wno-padded -Wno-long-long -Woverloaded-virtual -Wno-old-style-cast -O2 -g -DNDEBUG -MD -MT src/CppUTest/CMakeFiles/CppUTest.dir/TestMemoryAllocator.cpp.obj -MF src\CppUTest\CMakeFiles\CppUTest.dir\TestMemoryAllocator.cpp.obj.d -o src/CppUTest/CMakeFiles/CppUTest.dir/TestMemoryAllocator.cpp.obj -c src/CppUTest/TestMemoryAllocator.cpp
In file included from include/CppUTest/Utest.h:34,
                 from include/CppUTest/TestHarness.h:39,
                 from src/CppUTest/TestMemoryAllocator.cpp:28:
include/CppUTest/SimpleString.h:183:31: error: 'nullptr_t' does not name a type
 SimpleString StringFrom(const nullptr_t value);
                               ^~~~~~~~~
include/CppUTest/SimpleString.h:183:31: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
include/CppUTest/SimpleString.h:42:1:
+#include <cstddef>

include/CppUTest/SimpleString.h:183:31:
 SimpleString StringFrom(const nullptr_t value);
                               ^~~~~~~~~
ninja: build stopped: subcommand failed.

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-17 02:52:10

事实证明这是CppUtest中的一个bug。

代码语言:javascript
复制
@@ -562,7 +562,7 @@ SimpleString BracketsFormattedHexString(SimpleString hexString)
   * Specifically nullptr_t is not officially supported
   */
   #if __cplusplus > 199711L && !defined __arm__
 - SimpleString StringFrom(const nullptr_t value)
 + SimpleString StringFrom(const std::nullptr_t value)
   {
       (void) value;
       return "(null)";

自2019年12月5日起已修复。

https://github.com/leonardopsantos/cpputest/commit/cb8c457dda6741ede7009103db99967b5f27c969

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59142848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档