Building Qt - NMAKE : fatal error U1077: 'cd' : return code '0x2'

旧巷老猫 提交于 2019-12-03 12:10:26

This exact error has been discussed in this thread in the Qt forum. It links to an unofficial patch which can be found here.

For future reference, the contents of the patch are listed below:

diff --git a/src/3rdparty/clucene/src/CLucene/StdHeader.h b/src/3rdparty/clucene/src/CLucene/StdHeader.h
index 224d400..50adbf6 100644
--- a/src/3rdparty/clucene/src/CLucene/StdHeader.h
+++ b/src/3rdparty/clucene/src/CLucene/StdHeader.h
@@ -123,6 +123,9 @@ extern int _lucene_counter_break; //can set a watch on this
 #endif

 #if !defined(LUCENE_DISABLE_HASHING) && defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET)
+   #if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+   #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
+   #endif
    //hashing is all or nothing!
    #include <hash_map>
    #include <hash_set>
diff --git a/src/3rdparty/clucene/src/CLucene/util/VoidMap.h b/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
index 1153a01..b37465a 100644
--- a/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
+++ b/src/3rdparty/clucene/src/CLucene/util/VoidMap.h
@@ -217,17 +217,28 @@ public:

 //A collection that contains no duplicates
 //does not guarantee that the order will remain constant over time
+// MSVC2015: https://codereview.qt-project.org/#/c/110682/3//ALL,unified
 template<typename _kt, typename _vt, 
    typename _Compare,
    typename _KeyDeletor=CL_NS(util)::Deletor::Dummy,
    typename _ValueDeletor=CL_NS(util)::Deletor::Dummy>
 class CLSet:public __CLMap<_kt,_vt,
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+   CL_NS_STD(map)<_kt,_vt>,
+#else
    CL_NS_STD(map)<_kt,_vt, _Compare>,
+#endif
    _KeyDeletor,_ValueDeletor>
 {
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+   typedef typename CL_NS_STD(map)<_kt,_vt> _base;
+   typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt>,
+       _KeyDeletor,_ValueDeletor> _this;
+#else
    typedef typename CL_NS_STD(map)<_kt,_vt,_Compare> _base;
    typedef __CLMap<_kt, _vt, CL_NS_STD(map)<_kt,_vt, _Compare>,
        _KeyDeletor,_ValueDeletor> _this;
+#endif
 public:
    CLSet ( const bool deleteKey=false, const bool deleteValue=false )
    {
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
index 8e1fdbe..79511ef 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/ArgList.h
@@ -172,7 +172,10 @@ namespace JSC {
         void operator delete[](void*);

         void* operator new(size_t, void*);
+// FIXME: strange magic
+#if !(defined(_MSC_VER) && (_MSC_VER >= 1900))
         void operator delete(void*, size_t);
+#endif
     };

     class ArgList {
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
index b1ec09f..11670e2 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/StringExtras.h
@@ -36,6 +36,7 @@
 #if COMPILER(MSVC)
 // FIXME: why a COMPILER check instead of OS? also, these should be HAVE checks

+#if (_MSC_VER < 1900)
 inline int snprintf(char* buffer, size_t count, const char* format, ...) 
 {
     int result;
@@ -45,6 +46,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...)
     va_end(args);
     return result;
 }
+#endif

 #if COMPILER(MSVC7) || OS(WINCE)

diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
index 7ba487f..790c6a0 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
@@ -170,8 +170,16 @@ namespace WTF {

     // GCC's libstdc++ 20070724 and later supports C++ TR1 type_traits in the std namespace.
     // VC10 (VS2010) and later support C++ TR1 type_traits in the std::tr1 namespace.
+    // VC14 (VS2015) and later support C++11 type_traits in the std namespace, but old TR1 names
+    // have been removed. See https://msdn.microsoft.com/en-us/library/vstudio/bb531344(v=vs.140).aspx
+    // for details.
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+    template<typename T> struct HasTrivialConstructor : public std::is_trivially_default_constructible<T> { };
+    template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+#else
     template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
     template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
+#endif

 #else

diff --git a/src/3rdparty/javascriptcore/WebKit.pri b/src/3rdparty/javascriptcore/WebKit.pri
index 9aaaa99..487aad6 100644
--- a/src/3rdparty/javascriptcore/WebKit.pri
+++ b/src/3rdparty/javascriptcore/WebKit.pri
@@ -22,7 +22,7 @@ isEmpty(OUTPUT_DIR) {

 DEFINES += BUILDING_QT__=1
 building-libs {
-    win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+    win32-msvc200*|win32-msvc2010*|win32-msvc2012*|win32-msvc2013*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
 } else {
     CONFIG(QTDIR_build) {
         QT += webkit
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
index bb2d2842..627b015 100644
--- a/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
+++ b/src/3rdparty/webkit/Source/JavaScriptCore/runtime/ArgList.h
@@ -174,7 +174,10 @@ namespace JSC {
         void operator delete[](void*);

         void* operator new(size_t, void*);
+// FIXME: strange magic
+#if !(defined(_MSC_VER) && (_MSC_VER >= 1900))
         void operator delete(void*, size_t);
+#endif
     };

     class ArgList {
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
index 371e33b..37e0858 100644
--- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
+++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/StringExtras.h
@@ -37,6 +37,7 @@
 #if COMPILER(MSVC)
 // FIXME: why a COMPILER check instead of OS? also, these should be HAVE checks

+#if (_MSC_VER < 1900)
 inline int snprintf(char* buffer, size_t count, const char* format, ...) 
 {
     int result;
@@ -52,6 +53,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...)

     return result;
 }
+#endif

 inline double wtf_vsnprintf(char* buffer, size_t count, const char* format, va_list args)
 {
diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
index 44103cd..7b09980 100644
--- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
+++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/TypeTraits.h
@@ -183,8 +183,16 @@ namespace WTF {

     // GCC's libstdc++ 20070724 and later supports C++ TR1 type_traits in the std namespace.
     // VC10 (VS2010) and later support C++ TR1 type_traits in the std::tr1 namespace.
+    // VC14 (VS2015) and later support C++11 type_traits in the std namespace, but old TR1 names
+    // have been removed. See https://msdn.microsoft.com/en-us/library/vstudio/bb531344(v=vs.140).aspx
+    // for details.
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900))
+    template<typename T> struct HasTrivialConstructor : public std::is_trivially_default_constructible<T> { };
+    template<typename T> struct HasTrivialDestructor : public std::is_trivially_destructible<T> { };
+#else
     template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
     template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
+#endif

 #else

diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri
index 01f88a4..b607444 100644
--- a/src/3rdparty/webkit/Source/WebKit.pri
+++ b/src/3rdparty/webkit/Source/WebKit.pri
@@ -38,7 +38,7 @@ DEPENDPATH += $$OUT_PWD

 DEFINES += BUILDING_QT__=1
 building-libs {
-    win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+    win32-msvc200*|win32-msvc2010*|win32-msvc2012*|win32-msvc2013*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
 } else {
     CONFIG(QTDIR_build) {
         QT += webkit

@Bowdzone thanks. this patch worked like a charm for building qt4.8.7

I also needed to append "$(QMAKESPEC)" == "win32-msvc2015" after msvc2013 option in C:\repo\qt\4.8.7\qmake\Makefile.win32( line 27), to get the configure command to work - as noted in building qt for msvc2015 guide lines

BTW I had to build qt4.8.7 as a dependency for 3dslicer OSS package.

p.s I dont have enough points to add-a-comment. This is a validation that the patch worked for me.

72DFBF5B A0DF5BE9

It is happening because you probably have a very long path for location of source codes. So try to shorten the path for location of codes. For example put them in a short folder name in root of a drive.

Also see: https://stackoverflow.com/a/14862127/2385309

Run the command prompt as administrator, I did it and worked for me!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!