Главная  /  Правка  /  История  /   /  Область пользователей

Сборка CppCMS с использованием Visual Studio

Введение

В основном, сборка на Windows с использованием Microsoft Visual Studio довольно сложна из-за нескольких факторов:

  1. Отсутствие легкодоступных уже собранных библиотек как в debug, так и release вариантах для вашей версии MSVC
  2. Необходимость строгого разделения debug/release

Поэтому, чтобы сделать вашу жизнь при сборке CppCMS проще, предлагаю следующие правила:

  1. Строго разделяйте установки debug и release и 32/64-разрядные архитектуры, например

     c:\cppcms_deps\x64\Debug
     c:\cppcms_deps\x64\Release
     c:\cppcms_deps\x86\Debug
     c:\cppcms_deps\x86\Release
    

    Примечание: pcre, icu и zlib поддерживает debug/release коррекцию библиотек/dll для flavor debug/release, но OpenSSL - нет. Поэтому я настоятельно рекомендую использовать отдельные ветки директорий для обеспечения безопасности.

  2. При сборке с CMake всегда используйте генератор "NMake Makefiles", чтобы предотвратить конфликты методов debug/release

  3. Начните с базовых завистмостей zlib и pcre, которые могут быть собраны с CMake, затем переходите к более сложным, таким как OpenSSL или ICU при необходимости.

Прежде Чем Начнем

Сборка Зависимостей

  1. Установите Visual Studio или Visual Studio build tools
  2. Установите CMake, убедитесь, что он есть в глобальном пути
  3. Установите Python версии 2.x, убедитесь, что он есть в глобальном пути
  4. Опционально установите git, если хотите собирать вышестоящие ветки.

Проверки: откройте cmd и попробуйте запустить cmake, python и опционально git - посмотрите, работают ли они.

И, наконец, убедитесь, что директории, в которых вы делаете сборку не сканируются анитивирусом - иначе можете получить некоторые сбои при сборке из-за блокировки файлов AV.

Примечание: во всех сборках мы будем использовать консоль Visual Studio - откройте одну из них с правильной архитектурой.

Например:

Я предполагаю, что во время этого урока вы работаете в одной из таких консолей.

Обязательные зависимости

PCRE

PCRE поставляется с системой сборки CMake, однако собрать ее правильно может быть несколько сложно.

Скачайте последнюю версию PCRE 8.x. Не используйте PCRE2, он не поддерживается.

Важные параметры:

  1. Используйте генератор "NMake Makefiles" - у генератора по умолчанию множественный flavor и его намного сложнее использовать правильно.
  2. Убедитесь, что вы явно указываете flavor Release/Debug -DCMAKE_BUILD_TYPE=Release
  3. Соберите разделяемую версию PCRE (т.е. dll) -DBUILD_SHARED_LIBS=ON
  4. Убедитесь, что включили опцию -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON , чтобы включить поддержку utf-8 - иначе не пройдут тесты regex

Пошагово в консоли:

Release:

cd \path\to\pcre\soures
mkdir msvc-release-x64
cd msvc-release-x64
cmake -DBUILD_SHARED_LIBS=ON  ^
  -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON  ^
  -G"NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=Release ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Release ^
  ..
nmake
nmake install
cd ..

Debug:

cd \path\to\pcre\soures
mkdir msvc-debug-x64
cd msvc-debug-x64
cmake -DBUILD_SHARED_LIBS=ON  ^
  -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON ^
  -G"NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=Debug ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Debug ^
  ..
nmake
nmake install
cd ..

zlib

К счастью, последние версии zlib поставляются с поддержкой CMake, что гораздо упрощает сборку в Visual Studio.

  1. Используйте генератор "NMake Makefiles", генератор по умолчанию мультиверсионный и его намного сложнее использовать.
  2. Убедитесь, что явно указываете flavor Release/Debug -DCMAKE_BUILD_TYPE=Release
  3. Соберите разделяемую версию zlib (т.е. dll) -DBUILD_SHARED_LIBS=ON

Пошагово:

Откройте командную строку Visual Studio, например x64 Native Tools Command Prompt for VS 2017 или x86 Native Tools Command Prompt for VS 2017 и смените каталог на расположение источников zlib. Создайте каталог сборки и запустите команды:

Например для сборки x64

Release

mkdir msvc-release-x64
cd msvc-release-x64
cmake -DBUILD_SHARED_LIBS=ON  ^
  -G"NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=Release ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Release ^
  ..
nmake
nmake install
cd ..

Debug

mkdir msvc-debug-x64
cd msvc-debug-x64
cmake -DBUILD_SHARED_LIBS=ON ^
  -G"NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=Debug ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Debug ^
  ..
nmake
nmake install
cd ..

Проверка результатов сборки.

После установки PCRE и zlib у вас должна получиться такая структура:

c:\cppcms_deps\x64\Release
c:\cppcms_deps\x64\Release\include
c:\cppcms_deps\x64\Release\include\zlib.h
c:\cppcms_deps\x64\Release\include\pcre.h
...
c:\cppcms_deps\x64\Release\lib
c:\cppcms_deps\x64\Release\lib\zlib.lib
c:\cppcms_deps\x64\Release\lib\pcre.lib
...
c:\cppcms_deps\x64\Release\bin
c:\cppcms_deps\x64\Release\bin\zlib1.dll
c:\cppcms_deps\x64\Release\bin\pcre.dll
...

c:\cppcms_deps\x64\Debug
c:\cppcms_deps\x64\Debug\include
c:\cppcms_deps\x64\Debug\include\zlib.h
c:\cppcms_deps\x64\Debug\include\pcre.h
...
c:\cppcms_deps\x64\Debug\lib
c:\cppcms_deps\x64\Debug\lib\zlibd.lib
c:\cppcms_deps\x64\Debug\lib\pcred.lib
...
c:\cppcms_deps\x64\Debug\bin
c:\cppcms_deps\x64\Debug\bin\zlibd1.dll
c:\cppcms_deps\x64\Debug\bin\pcred.dll

Примечание - DLL и библиотеки с суффиксом "d" находятся в пути debug.

Опциональные Зависимости

OpenSSL

Предупреждение: OpenSSL не корректирует flavor Debug и Release - поэтому убедитесь, что у вас отдельный установочный префикс для двух flavor OpenSSL и никогда их не смешивайте!

Прежде всего, вам нужно установить perl, поскольку это базовое средство сборки и настройки. Рекомендуется использовать ActivePerl. Убедитесь, что он находится в системном пути. Примечание: msys2 perl или cygwin perl не работают.

Примечание: Убедитесь, что открыли правильную консоль MSVC для сборок x64 и x86.

Для 64-битной сборки release запустите команду:

perl Configure VC-WIN64A no-asm ^
  --prefix=c:\cppcms_deps\x64\Release ^
  --openssldir=c:\cppcms_deps\x64\Release

Для 64-битной сборки debug запустите команду:

perl Configure debug-VC-WIN64A no-asm ^
  --prefix=c:\cppcms_deps\x64\Release ^
  --openssldir=c:\cppcms_deps\x64\Release

Для 32-битной сборки release запустите команду:

perl Configure VC-WIN32 no-asm ^
  --prefix=c:\cppcms_deps\x86\Release ^
  --openssldir=c:\cppcms_deps\x86\Release

Для 64-битной сборки debug запустите команду:

perl Configure debug-VC-WIN32 no-asm ^
  --prefix=c:\cppcms_deps\x86\Debug ^
  --openssldir=c:\cppcms_deps\x86\Debug

Затем запустите:

nmake
nmake install

И между flavor убедитесь, что запустили

nmake distclean

Примечание:

ICU

Несколько заметок перед сборкой ICU на Windows.

  1. Не используйте официальные сборки на веб-сайте ICU - они не содержат debug версию и собраны только для 1 конкретной версии MSVC.
  2. Вы можете попробовать взять готовые библиотеки здесь: https://www.npcglib.org/~stathis/blog/precompiled-icu/ однако сайт не обновляется или не имеет вариантов для вашей версии MSVC.
  3. Если вы собираете ICU, используйте комбинацию cygwin/MSVC, не используйте предоставленное решение MSVC.

Использование Скачанных бинарников

Вы можете взять их здесь: https://www.npcglib.org/~stathis/blog/precompiled-icu

Вам нужно поместить файлы include/bin/lib в ваше дерево каталогов в соответствии с правильными путями debug/release и 32/64 бит. Например, скопируйте следующее:

Заголовочные файлы:

icu-59.1-vs2017/include/unicode -> 
   c:\cppcms_deps\x64\Release\include\unicode
   c:\cppcms_deps\x64\Debug\include\unicode
   c:\cppcms_deps\x86\Release\include\unicode
   c:\cppcms_deps\x86\Debug\include\unicode

Библиотеки Импорта:

icu-59.1-vs2017/include/lib/*d.lib -> 
   c:\cppcms_deps\x86\Debug\lib
icu-59.1-vs2017/include/lib/*.lib ->  # без d
   c:\cppcms_deps\x86\Release\lib
icu-59.1-vs2017/include/lib64/*d.lib -> 
   c:\cppcms_deps\x64\Debug\lib
icu-59.1-vs2017/include/lib64/*.lib ->  # без d
    c:\cppcms_deps\x64\Release\lib

DLL:

    icu-59.1-vs2017/include/bin/*d59.dll -> 
       c:\cppcms_deps\x86\Debug\bin
    icu-59.1-vs2017/include/bin/*59.dll ->  # без d
       c:\cppcms_deps\x86\Release\bin
    icu-59.1-vs2017/include/bin64/*d59.dll -> 
       c:\cppcms_deps\x64\Debug\bin
    icu-59.1-vs2017/include/bin64/*59.dll ->  # без d
       c:\cppcms_deps\x64\Release\bin

Это поможет вам сэкономить на хлопотах сборки ICU.

Сборка ICU

Примечание: инструкции основаны на инструкциях отсюда: https://wiki.qt.io/Compiling-ICU-with-MSVC

Шаги для сборки:

  1. Скачайте icu-xx-src.zip. Заметьте - zip, не tgz. tgz не содержит всех файлов для Windows сборки
  2. Установите cygwin - нужны только базовые пакеты: make, dos2unix и binutils.
  3. Откройте консоль Visual Studio и настройте путь до местоположения директории cygwin\bin, так что bash и другие инструменты будут доступны:

     set PATH=%PATH%;c:\cygwin\bin
    

    Так вы можете запускать команды cygwin из командной строки MSVC

  4. Перейдите в исходный каталог icu-пакета и исправьте кодировки строк, иначе bash не будет работать:

     dos2unix *
     dos2unix -f configure
    
  5. Для сборки release запустите:

     bash runConfigureICU ^
       Cygwin/MSVC ^
       --prefix=/cygdrive/c/cppcms_deps/x64/Release
     make
     make install
     make distclean
    

    Distclean позволит гладко запускать debug конфигурацию. Обратите внимание на cygwin-стиль пути к месту установки: /cygdrive/c/cppcms_deps/x64/Release

  6. Для сборки debug запустите

     bash runConfigureICU ^
       --enable-debug --disable-release ^
       Cygwin/MSVC ^
       --prefix=/cygdrive/c/cppcms_deps/x64/Debug
     make
     make install
     make distclean
    

    Примечание: --enable-debug --disable-release должны идти до Cygwin/MSVC - иначе вы получите бинарники release

  7. Обратите внимание, скрипт установки устанавливает DLL-файлы в то же место, что и lib, поэтому вам нужно переместить их из c:\cppcms_deps\x64\(Release|Debug)\lib в c:\cppcms_deps\x64\(Release|Debug)\bin

Теперь у вас есть рабочее ICU.

Сборка CppCMS

Несколько заметок при сборке с использованием MSVC:

  1. Поддерживается только генератор "NMake Makefiles"
  2. Вы должны явно указать -DCMAKE_BUILD_TYPE=Debug или -DCMAKE_BUILD_TYPE=RelWithDebInfo, т.к. по умолчанию в MSVC - Debug.
  3. Также рекомендуется добавить -DDISABLE_STATIC=ON , поскольку на Windows только dll версия позволяет создавать динамически загружаемые view и использовать плагины.

Итак, откройте консоль VS, перейдите в каталог исходников cppcms и запустите конфигурацию и сборку:

Release

Сборка Release

mkdir msvc-x64-rel
cd msvc-x64-rel
cmake -G "NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=RelWithDebInfo ^
  -DDISABLE_STATIC=ON ^
  -DCMAKE_INCLUDE_PATH=c:\cppcms_deps\x64\Release\include ^
  -DCMAKE_LIBRARY_PATH=c:\cppcms_deps\x64\Release\lib ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Release ^
  ..
nmake 

Тестирование:

set PATH=%PATH%;c:\cppcms_deps\x64\Release\bin;.\booster\
nmake test 

Установка:

nmake install

Debug

Сборка Debug

mkdir msvc-x64-deb
cd msvc-x64-deb
cmake -G "NMake Makefiles" ^
  -DCMAKE_BUILD_TYPE=Debug^
  -DDISABLE_STATIC=ON ^
  -DCMAKE_INCLUDE_PATH=c:\cppcms_deps\x64\Debug\include ^
  -DCMAKE_LIBRARY_PATH=c:\cppcms_deps\x64\Debug\lib ^
  -DCMAKE_INSTALL_PREFIX=c:\cppcms_deps\x64\Debug ^
  ..
nmake 

Тестирование:

set PATH=%PATH%;c:\cppcms_deps\x64\Debug\bin;.\booster\
nmake test 

Установка:

nmake install

И теперь приступим к разработке с использованием CppCMS

Ссылки

  1. http://developer.covenanteyes.com/building-openssl-for-visual-studio/
  2. https://wiki.qt.io/Compiling-ICU-with-MSVC
  3. https://www.npcglib.org/~stathis/blog/precompiled-icu/

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0