Как создать libjson.lib, используя makefile на windows? - PullRequest
0 голосов
/ 30 августа 2018

Я скачал C ++ libJSON по этой ссылке: https://sourceforge.net/projects/libjson/ Как я могу создать библиотеку, используя предоставленный ими код?

Я установил MinGW, добавил его в путь в переменной среды и сделал cd в каталог, где у меня есть make-файл, и попытался использовать mingw32-make.exe. НО я получаю эту ошибку:

enter image description here

Я понимаю, что мне нужно добавить аргументы, но я не знаю, что добавить .. Не могли бы вы помочь? спасибо!

1 Ответ

0 голосов
/ 31 августа 2018

Я работаю над v 7.6.1 (последний на данный момент). Скачано с [SourceForge]: ninja9578 / libjson - libjson_7.6.1.zip .

В начале я думал, что это проблема получаса (незначительные изменения в make-файле , поскольку Win s mkdir по умолчанию создает вложенные каталоги и не принимает аргумент -p ).

Чтобы прояснить ситуацию, я попытался запустить окно MinGW mingw32-make из Win * cmd (без дополнительных обертки).

Итак, я начал вставлять (в makefile ) условные команды (на основе OS ), но этого было недостаточно. Изменения, необходимые исходному make-файлу для реализации этого сценария, казались слишком большими (затрудняющими понимание файла) по сравнению с преимуществом: работа в среде, в которой мало кто заботится, поэтому логичное решение должен был создать отдельный makefile (назвал его Makefile.mak )

Тем не менее, официальный документ ( "$ {LIBJSON_SRC_DIR} /Documentation.pdf" ) гласит:

MinGW (Windows) - Поддерживается , частично протестировано

Я не прошел через весь .pdf , чтобы увидеть, каковы необходимые условия для этого, но (кроме того, что это не работает - отсюда и существование этого вопроса), глядя на makefile , есть вещи, которые выглядят не так:

  • Shell ( Nix ( sh , bash , ...) против Win ( batch ( cmd ), PS , VBS , ...)) ( квалифицировано как пригодное для использования в GNU makefile ) разница (rm -f против del /Q /S)
  • Способ выполнения команд makefile ( CreateProcess для каждой из них: включая cd - который не меняется среда ( cwd ), приводящая к следующей ошибке команды), а также разделитель команд (; ), не работает должным образом
  • FS разделители пути ( / против \ ), обработанные вышеуказанные команды

Я "преобразовал" make-файл , учитывая, что текущее поведение Nix ( Lnx ) должно быть сохранено на Win , и я также обнаружил некоторые (синтаксические) ошибки (так что, по-видимому, версия Nix тоже не работала - ну, библиотека была построена, но это все). Исправил ошибки, а затем захотел опубликовать ответ на официальном сайте (чтобы каждый, кто следил за ним, был в курсе изменений).

Кратко посмотрел и заметил, что последнее действие относится к 180622 (есть еще, около этой даты). Но если присмотреться, то кажется, что последняя фактическая работа была сделана 5 лет назад ( 2013 ), поэтому я не уверен, что она поддерживается (также быстро просматривал GitHub , но не нашел его).

Во всяком случае, я связался с автором, так как у меня нет прав на открытие заявок (отправка исправлений), но я не получил ответа, поэтому я запустил тему: [SourceForge]: ninja9578 / libjson - Запрос на разрешения на отправку патча . Я отправлю патч (при условии, что мне будут предоставлены разрешения).

Короче говоря

В любом случае, вот Win makefile (в основном скопированный с оригинального):

Makefile.mak

###############################################################################
#                                                       
#  Copyright 2010 Jonathan Wallace. All rights reserved.         
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions are met:
#
#      1. Redistributions of source code must retain the above copyright
#         notice, this list of conditions and the following disclaimer.
#
#      2. Redistributions in binary form must reproduce the above copyright
#         notice, this list of conditions and the following disclaimer in the
#         documentation and/or other materials provided with the distribution.
#
#  THIS SOFTWARE IS PROVIDED BY JONATHAN WALLACE ``AS IS'' AND ANY 
#  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
#  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JONATHAN WALLACE OR
#  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
#  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
#  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
#  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
#  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
#  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
#  DAMAGE.
#
#  The views and conclusions contained in the software and documentation are
#  those of the authors and should not be interpreted as representing official
#  policies, either expressed or implied, of Jonathan Wallace....
#
#
#  Author Bernhard Fluehmann
#
#  bernhard.fluehmann@patton-inalp.com
#
#
#  Adapted for Windows (MinGW) by Cristi Fati (fati_utcluj@yahoo.com)
#
#
#  TARGETS
#    all
#      Builds either a shared or a static library, depending of the value
#      of the SHARED variable.
#      Default: static
#
#    banner
#      Displays the library version and the target
#
#    install
#      Installs either the shared of the static library, depending of the value
#      of the SHARED variable. Installs the header files as well.
#      Builds the library before installing if it does not exist already.
#      Ececutes ldconfig in case of the shared library.
#      Default locations:
#        library: $(exec_prefix)/$(libdir) => /usr/lib
#        headers:   $(prefix)/$(includedir) => /usr/include
#
#    install_headers
#      Installs the header files.
#      Default location: $(prefix)/$(includedir) => /usr/include
#
#    clean
#      Removes the shared or the static library, depending of the value
#      of the SHARED variable, from this folder and all the folders and objects
#      which were created to build it.
#
#    uninstall
#      Removes the shared or the static library, depending of the value
#      of the SHARED variable from the system. In case of the shared library,
#      removes the symbolic links as well and executes ldconfig.
#
#    uninstall_headers
#      Remove the headers from the system.
#
#  Variables
#    prefix
#      The general installation root directory. Default: /usr
#
#    exec_prefix
#      The installation root directory to place executables and libraries.
#      Default: prefix
#
#    libdir
#      The directory where the libraries are installed, as a subdirectory of
#      exec_prefix. Default: lib
#
#    includedir
#      The directory where the header files are installed, as a subdirectory of
#      prefix. Default: include
#
#    srcdir
#      The directory where the object source files are located.
#      Default: _internal/Source
#
#    CXX
#      The compiler to be used. Default: c++
#
#    CXXFLAGS
#      The compiler flags used to compile the object files.
#      Default:
#        cxxflags_default for default
#        cxxflags_small   for BUILD_TYPE=small
#        cxxflags_debug   for BUILD_TYPE=debug
#
#    AR
#      The archiver to be used. Default: ar
#
#    PIC
#      The PIC to be used. Default: PIC
#
#    BUILD_TYPE
#      Used to select a specific set of predefined configuration parameters.
#      Default:  undefined: The default settings are used
#      Options:
#        small
#        debug
#
#    SHARED
#      Used to select if the library is a shared or a dynamic one
#      Default: undefined: static
#      Options:
#        0:         static
#        1:         shared
#
#
#

# Shell (cmd) commands
movefile = move /Y
copyfile = copy /Y
removefile = del /Q /S
makedirs = -mkdir
copydir = xcopy /B /E /H /K /Y
removedir = -rmdir /Q /S
makelink = mklink


# JSON source files to build
objects = internalJSONNode.o JSONAllocator.o JSONChildren.o \
          JSONDebug.o JSONIterators.o JSONMemory.o JSONNode.o \
          JSONNode_Mutex.o JSONPreparse.o JSONStream.o JSONValidator.o \
          JSONWorker.o JSONWriter.o libjson.o

# Defaults
cxxflags_default = -O3 -ffast-math -fexpensive-optimizations -DNDEBUG
cxxflags_small = -Os -ffast-math -DJSON_LESS_MEMORY -DNDEBUG
cxxflags_debug = -g -DJSON_SAFE -DJSON_DEBUG
cxxflags_shared = -f$(PIC)
libname = libjson
libname_hdr := $(libname)
libname_debug = $(libname)_dbg
suffix_shared = so
suffix_static = a
major_version = 7
minor_version = 6.1
objdir = Objects


# Variables
prefix ?= ../install_libjson
exec_prefix ?= $(prefix)
libdir ?= lib
includedir ?= include
intdir ?= _internal
srcdir ?= $(intdir)/Source
CXX ?= c++
AR ?= ar
PIC ?= PIC
BUILD_TYPE ?= "default"
SHARED ?= "1"


# Internal Variables
inst_path = $(exec_prefix)/$(libdir)
include_path = $(prefix)/$(includedir)

install_include_lib_dir = $(include_path)/$(libname_hdr)
install_include_lib_src_dir = $(install_include_lib_dir)/$(srcdir)

# Usage check
ifdef CXXFLAGS
ifdef BUILD_TYPE
    $(error CXXFLAGS and BUILD_TYPE are mutually exclusive)
endif
endif

# BUILD_TYPE specific settings
ifeq ($(BUILD_TYPE),small)
    CXXFLAGS = $(cxxflags_small)
else ifeq ($(BUILD_TYPE),debug)
    CXXFLAGS = $(cxxflags_debug)
    libname := $(libname_debug)
else
    CXXFLAGS ?= $(cxxflags_default)
endif

# SHARED specific settings
ifeq ($(SHARED),1)
    libname_shared = $(libname).$(suffix_shared)
    libname_shared_major_version = $(libname_shared).$(major_version)
    lib_target = $(libname_shared_major_version).$(minor_version)
    objdir := $(objdir)_shared
    CXXFLAGS := $(CXXFLAGS) $(cxxflags_shared)
else
    lib_target = $(libname).$(suffix_static)
    objdir := $(objdir)_static
endif

# Win styple paths - to be used by shell commands
objdir_win = $(subst /,\,$(objdir))
inst_path_win = $(subst /,\,$(inst_path))
intdir_win = $(subst /,\,$(intdir))
srcdir_win = $(subst /,\,$(srcdir))
install_include_lib_dir_win = $(subst /,\,$(install_include_lib_dir))
install_include_lib_src_dir_win = $(subst /,\,$(install_include_lib_src_dir))


# Phony targets
.PHONY: all banner installdirs install install_headers clean uninstall uninstall_headers

# Targets
all: $(lib_target)
    @echo "============================================================"
    @echo "Done"
    @echo "============================================================"

banner:
    @echo "============================================================"
    @echo "libjson version: "$(major_version).$(minor_version) "target: "$(target) "OS: "Windows
    @echo "============================================================"

installdirs: banner
    $(makedirs) $(objdir_win)

# Libraries
ifeq ($(SHARED),1)
$(lib_target): banner installdirs $(addprefix $(objdir)/, $(objects))
    @echo "Link "
    cd $(objdir_win) && \
    $(CXX) -shared -Wl,-soname,$(libname_shared_major_version) -o $@ $(objects) && \
    $(movefile) $@ ..
    @echo "Link: Done"
else
$(lib_target): banner installdirs $(addprefix $(objdir)/, $(objects))
    @echo "Archive"
    cd $(objdir_win) && \
    $(AR) -cvq $@ $(objects) && \
    $(movefile) $@ ..
    @echo "Archive: Done"
endif

# Compile object files
$(objdir)/%.o: $(srcdir)/%.cpp
    $(CXX) $< -o $@ -c $(CXXFLAGS)

ifeq ($(SHARED),1)
install: banner install_headers $(lib_target)
    @echo "Install shared library"
    $(makedirs) $(inst_path_win)
    $(copyfile) $(lib_target) $(inst_path_win)
    cd $(inst_path_win) && \
    $(removefile) $(libname_shared_major_version) && $(makelink) $(libname_shared_major_version) $(lib_target) && \
    $(removefile) $(libname_shared) && $(makelink) $(libname_shared) $(libname_shared_major_version)
    @echo ldconfig
    @echo "Install shared library: Done."
else
install: banner install_headers $(lib_target)
    @echo "Install static library"
    $(makedirs) $(inst_path_win)
    $(copyfile) .\$(lib_target) $(inst_path_win)
    @echo "Install static library: Done."
endif

install_headers: banner
    @echo "Install header files"
    $(makedirs) $(install_include_lib_src_dir_win)\JSONDefs
    $(makedirs) $(install_include_lib_src_dir_win)\Dependencies
    $(copyfile) .\*.h $(install_include_lib_dir_win)
    -$(removefile) $(install_include_lib_dir_win)\.*.h
    $(copyfile) .\$(srcdir_win)\*.h $(install_include_lib_src_dir_win)
    -$(removefile) $(install_include_lib_src_dir_win)\.*.h
    $(copydir) .\$(srcdir_win)\JSONDefs $(install_include_lib_src_dir_win)\JSONDefs
    $(copydir) $(intdir_win)\Dependencies $(install_include_lib_src_dir_win)\Dependencies
    @echo "Install header files: Done."

clean: banner
    @echo "Clean library and object folder"
    $(removedir) $(objdir_win)
    -$(removefile) $(lib_target)
    @echo "Clean library and object folder: Done"

ifeq ($(SHARED),1)
uninstall: banner uninstall_headers
    @echo "Uninstall shared library"
    -$(removefile) $(inst_path_win)\$(libname)*
    @echo ldconfig
    @echo "Uninstall shared library: Done"
else
uninstall: banner uninstall_headers
    @echo "Uninstall static library"
    -$(removefile) $(inst_path_win)\$(lib_target)
    @echo "Uninstall static library: Done"
endif

uninstall_headers: banner
    @echo "Uninstall header files"
    $(removedir) $(install_include_lib_dir_win)
    @echo "Uninstall header files: Done"

test:
    $(CXX) _internal/TestSuite/main.cpp  _internal/TestSuite/TestAssign.cpp  _internal/TestSuite/TestChildren.cpp \
    _internal/TestSuite/TestComments.cpp  _internal/TestSuite/TestConverters.cpp  _internal/TestSuite/TestCtors.cpp \
    _internal/TestSuite/TestEquality.cpp  _internal/TestSuite/TestFunctions.cpp  _internal/TestSuite/TestInequality.cpp \
    _internal/TestSuite/TestInspectors.cpp  _internal/TestSuite/TestIterators.cpp  _internal/TestSuite/TestMutex.cpp \
    _internal/TestSuite/TestNamespace.cpp  _internal/TestSuite/TestRefCounting.cpp _internal/TestSuite/TestSuite.cpp \
    _internal/TestSuite/TestWriter.cpp  _internal/TestSuite/TestString.cpp  _internal/TestSuite/UnitTest.cpp \
    _internal/TestSuite/TestValidator.cpp  _internal/TestSuite/TestStreams.cpp  _internal/TestSuite/TestBinary.cpp \
    _internal/TestSuite/RunTestSuite2.cpp  _internal/TestSuite/TestSharedString.cpp \
    _internal/Source/internalJSONNode.cpp  _internal/Source/JSONPreparse.cpp  _internal/Source/JSONChildren.cpp \
    _internal/Source/JSONDebug.cpp  _internal/Source/JSONIterators.cpp  _internal/Source/JSONMemory.cpp \
    _internal/Source/JSONNode_Mutex.cpp  _internal/Source/JSONNode.cpp  _internal/Source/JSONWorker.cpp \
    _internal/Source/JSONWriter.cpp  _internal/Source/libjson.cpp  _internal/Source/JSONValidator.cpp \
    _internal/Source/JSONStream.cpp  _internal/Source/JSONAllocator.cpp \
    _internal/TestSuite2/JSON_Base64/json_decode64.cpp \
    _internal/TestSuite2/JSON_Base64/json_encode64.cpp \
    _internal/TestSuite2/JSONDebug/JSON_ASSERT_SAFE.cpp \
    _internal/TestSuite2/JSONDebug/JSON_ASSERT.cpp \
    _internal/TestSuite2/JSONDebug/JSON_FAIL_SAFE.cpp \
    _internal/TestSuite2/JSONDebug/JSON_FAIL.cpp \
    _internal/TestSuite2/JSONGlobals/jsonSingleton.cpp \
    _internal/TestSuite2/JSONValidator/isValidArray.cpp \
    _internal/TestSuite2/JSONValidator/isValidMember.cpp \
    _internal/TestSuite2/JSONValidator/isValidNamedObject.cpp \
    _internal/TestSuite2/JSONValidator/isValidNumber.cpp \
    _internal/TestSuite2/JSONValidator/isValidObject.cpp \
    _internal/TestSuite2/JSONValidator/isValidPartialRoot.cpp \
    _internal/TestSuite2/JSONValidator/isValidRoot.cpp \
    _internal/TestSuite2/JSONValidator/isValidString.cpp \
    _internal/TestSuite2/JSONValidator/securityTest.cpp \
    _internal/TestSuite2/NumberToString/_areFloatsEqual.cpp \
    _internal/TestSuite2/NumberToString/_atof.cpp \
    _internal/TestSuite2/NumberToString/_ftoa.cpp \
    _internal/TestSuite2/NumberToString/_itoa.cpp \
    _internal/TestSuite2/NumberToString/_uitoa.cpp \
    _internal/TestSuite2/NumberToString/getLenSize.cpp \
    _internal/TestSuite2/NumberToString/isNumeric.cpp \
    $(CXXFLAGS) -o ./testapp
    ./testapp

Шаги:

  • Распакуйте архив с исходниками (они у меня в каталоге libjson )
  • Копировать Makefile.mak в этом каталоге
  • Изнутри dir вызовите (в окне cmd ) mingw32-make против этого файла (mingw32-make -f Makefile.mak)
    • Чтобы все работало нормально, каталог mingw32-make должен находиться в % PATH% (что вы уже знаете)
    • Если вам нужна динамическая версия ( .so - которая на самом деле .dll ), вы должны set SHARED=1 перед вызовом mingw32-make
    • Из-за mklink цель install не будет работать на более старых Win версиях (например, XP )

При сборке библиотеки я столкнулся со странной вещью, о которой вы должны знать. Вот версии инструментов / среды, над которыми я работал:

  1. g ++ 5.3.0 on Win - часть MinGW (устанавливается Qt )
  2. g ++ 5.4.0 on Lnx ( Ubtu )
  3. g ++ 7.2.0 on Win - часть MinGW (построено мной)
  4. g ++ 7.3.0 on Cygwin

3 из них работали нормально, но для # 3. я получил:

_internal/Source/JSONWorker.cpp:297:26: error: cast from 'const char*' to 'long int' loses precision [-fpermissive]
  JSON_ASSERT_SAFE(((long)end - (long)pos) > 4, JSON_TEXT("UTF will go out of bounds"), return JSON_TEXT('\0'););
                          ^

Я не знаю, почему это происходит (вероятно, проблема конфигурации g ++ ?), Но чтобы обойти это, вы должны добавить -fpermissive флаг компиляции (как указано в сообщении об ошибке) для переменной cxxflags_default в строке # 146 :

cxxflags_default = -O3 -ffast-math -fexpensive-optimizations -fpermissive -DNDEBUG

Это для сборки по умолчанию, если вы выберете другой вариант ( debug , small ), вам придется изменить соответствующую переменную.


Хотя в вопросе это не требовалось, я также публикую исправления для части Nix (которые как-то связаны, поскольку я обнаружил их во время работы над этим ответом).

libjson-7.6.1-nix_makefile.patch

--- libjson/makefile.orig   2012-05-30 05:15:42.000000000 +0300
+++ libjson/makefile    2018-08-31 01:09:57.484855300 +0300
@@ -131,7 +131,7 @@
 OS=$(shell uname)

 # Defaults
-ifeq ($(OS), Darwin)
+ifeq ($(OS),Darwin)
    cxxflags_default = -fast -ffast-math -fexpensive-optimizations -DNDEBUG
 else
    cxxflags_default = -O3 -ffast-math -fexpensive-optimizations -DNDEBUG
@@ -154,7 +154,8 @@
 exec_prefix     ?= $(prefix)
 libdir          ?= lib
 includedir      ?= include
-srcdir          ?= _internal/Source
+intdir          ?= _internal
+srcdir          ?= $(intdir)/Source
 CXX             ?= c++
 AR              ?= ar
 PIC             ?= PIC
@@ -175,9 +176,9 @@
 endif

 # BUILD_TYPE specific settings
-ifeq ($(BUILD_TYPE), small)
+ifeq ($(BUILD_TYPE),small)
    CXXFLAGS     = $(cxxflags_small)
-else ifeq ($(BUILD_TYPE), debug)
+else ifeq ($(BUILD_TYPE),debug)
    CXXFLAGS     = $(cxxflags_debug)
    libname     := $(libname_debug)
 else
@@ -185,7 +186,7 @@
 endif

 # SHARED specific settings
-ifeq ($(SHARED), 1)
+ifeq ($(SHARED),1)
    libname_shared               = $(libname).$(suffix_shared)
    libname_shared_major_version = $(libname_shared).$(major_version)
    lib_target                   = $(libname_shared_major_version).$(minor_version)
@@ -242,6 +243,7 @@
 ifeq ($(SHARED),1)
 install: banner install_headers $(lib_target)
    @echo "Install shared library"
+   mkdir -p $(inst_path)
    cp -f ./$(lib_target) $(inst_path)
    cd $(inst_path) ; \
    ln -sf $(lib_target) $(libname_shared_major_version) ; \
@@ -253,6 +255,7 @@
 else
 install: banner install_headers $(lib_target)
    @echo "Install static library"
+   mkdir -p $(inst_path)
    cp -f ./$(lib_target) $(inst_path)
    @echo "Install static library: Done."
 endif
@@ -265,8 +268,8 @@
    cp -f ./$(srcdir)/*.h $(include_path)/$(libname_hdr)/$(srcdir)
    cp -r ./$(srcdir)/JSONDefs $(include_path)/$(libname_hdr)/$(srcdir)
    chmod -R a+r $(include_path)/$(libname_hdr)
-   find  $(include_path)/$(libname_hdr) -type d -exec chmod a+x {} \;
-   cp -rv $(srcdir)/Dependencies/ $(include_path)/$(libname_hdr)/$(srcdir)
+   find $(include_path)/$(libname_hdr) -type d -exec chmod a+x {} \;
+   cp -rv $(intdir)/Dependencies/ $(include_path)/$(libname_hdr)/$(srcdir)
    @echo "Install header files: Done."

 clean: banner
@@ -311,28 +314,28 @@
    _internal/Source/JSONNode_Mutex.cpp     _internal/Source/JSONNode.cpp           _internal/Source/JSONWorker.cpp \
    _internal/Source/JSONWriter.cpp         _internal/Source/libjson.cpp            _internal/Source/JSONValidator.cpp \
    _internal/Source/JSONStream.cpp         _internal/Source/JSONAllocator.cpp \
-   _internal/TestSuite/TestSuite2/JSON_Base64/json_decode64.cpp \
-   _internal/TestSuite/TestSuite2/JSON_Base64/json_encode64.cpp \
-   _internal/TestSuite/TestSuite2/JSONDebug/JSON_ASSERT_SAFE.cpp \
-   _internal/TestSuite/TestSuite2/JSONDebug/JSON_ASSERT.cpp \
-   _internal/TestSuite/TestSuite2/JSONDebug/JSON_FAIL_SAFE.cpp \
-   _internal/TestSuite/TestSuite2/JSONDebug/JSON_FAIL.cpp \
-   _internal/TestSuite/TestSuite2/JSONGlobals/jsonSingleton.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidArray.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidMember.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidNamedObject.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidNumber.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidObject.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidPartialRoot.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidRoot.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/isValidString.cpp \
-   _internal/TestSuite/TestSuite2/JSONValidator/securityTest.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/_areFloatsEqual.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/_atof.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/_ftoa.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/_itoa.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/_uitoa.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/getLenSize.cpp \
-   _internal/TestSuite/TestSuite2/NumberToString/isNumeric.cpp \
+   _internal/TestSuite2/JSON_Base64/json_decode64.cpp \
+   _internal/TestSuite2/JSON_Base64/json_encode64.cpp \
+   _internal/TestSuite2/JSONDebug/JSON_ASSERT_SAFE.cpp \
+   _internal/TestSuite2/JSONDebug/JSON_ASSERT.cpp \
+   _internal/TestSuite2/JSONDebug/JSON_FAIL_SAFE.cpp \
+   _internal/TestSuite2/JSONDebug/JSON_FAIL.cpp \
+   _internal/TestSuite2/JSONGlobals/jsonSingleton.cpp \
+   _internal/TestSuite2/JSONValidator/isValidArray.cpp \
+   _internal/TestSuite2/JSONValidator/isValidMember.cpp \
+   _internal/TestSuite2/JSONValidator/isValidNamedObject.cpp \
+   _internal/TestSuite2/JSONValidator/isValidNumber.cpp \
+   _internal/TestSuite2/JSONValidator/isValidObject.cpp \
+   _internal/TestSuite2/JSONValidator/isValidPartialRoot.cpp \
+   _internal/TestSuite2/JSONValidator/isValidRoot.cpp \
+   _internal/TestSuite2/JSONValidator/isValidString.cpp \
+   _internal/TestSuite2/JSONValidator/securityTest.cpp \
+   _internal/TestSuite2/NumberToString/_areFloatsEqual.cpp \
+   _internal/TestSuite2/NumberToString/_atof.cpp \
+   _internal/TestSuite2/NumberToString/_ftoa.cpp \
+   _internal/TestSuite2/NumberToString/_itoa.cpp \
+   _internal/TestSuite2/NumberToString/_uitoa.cpp \
+   _internal/TestSuite2/NumberToString/getLenSize.cpp \
+   _internal/TestSuite2/NumberToString/isNumeric.cpp \
    $(CXXFLAGS) -o ./testapp
    ./testapp

Выше diff . См. [SO]: запускать / отлаживать UnitTests приложения Django из контекстного меню щелчка правой кнопкой мыши в PyCharm Community Edition? (@ Ответ CristiFati) ( Patching utrunner section) о том, как применять патчи к Win (в основном, каждая строка, начинающаяся с one) "+" знак входит, и каждая строка, которая начинается с one "-" знак гаснет). Я использую Cygwin , кстати .

...