In this article,I will explain how to build Qt 4.8 in windows by VS 2005. I take Qt 4.8.6 as the building target.
Step 0,Download the Qt 4.8.6,and uncompress the package. For me,the source code of Qt is in C:LibQtqt-everywhere-opensource-src⑷.8.6.
Step 1(skipable): modify the file, qt-everywhere-opensource-src⑷.8.6mkspecswin32-msvc2005,line 23:
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
to
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
Step 2: Modify the file,qt-everywhere-opensource-src⑷.8.6srcguikernelqclipboard_win.cpp,line 304:
static bool isProcessBeingDebugged(HWND hwnd)
{
DWORD pid = 0;
if (!GetWindowThreadProcessId(hwnd,&pid) || !pid)
return false;
const HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,pid);
if (!processHandle)
return false;
BOOL debugged = FALSE;
CheckRemoteDebuggerPresent(processHandle,&debugged);
CloseHandle(processHandle);
return debugged != FALSE;
}
To be
static bool isProcessBeingDebugged(HWND hwnd)
{
#if defined(_MSC_VER) && _MSC_VER <= 1400
return false;
#else
DWORD pid = 0;
if (!GetWindowThreadProcessId(hwnd,&debugged);
CloseHandle(processHandle);
return debugged != FALSE;
#endif
}
Step 3: Modify the file,qt-everywhere-opensource-src⑷.8.6src3rdpartywebkitSourceWebCoreplatformDefaultLocalizationStrategy.cpp,line 237:
String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
{
#if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
UNUSED_PARAM(selectedString);
return WEB_UI_STRING("Look Up in Dictionary","Look Up in Dictionary context menu item");
#else
#if USE(CF)
RetainPtr<CFStringRef> selectedCFString(AdoptCF,truncatedStringForLookupMenuItem(selectedString).createCFString());
return formatLocalizedString(WEB_UI_STRING("Look Up “%@”","Look Up context menu item with selected word"),selectedCFString.get());
#else
return WEB_UI_STRING("Look Up “<selection>”","Look Up context menu item with selected word").replace("<selection>",truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
}
To be
#else
#if(0)
return WEB_UI_STRING("Look Up “<selection>”",truncatedStringForLookupMenuItem(selectedString));
#else
return WEB_UI_STRING("Look Up <selection>",truncatedStringForLookupMenuItem(selectedString));
#endif
#endif
#endif
}