Mavericks
Acerca de este sitio Casablanca es el nombre clave del proyecto C++ REST SDK de Microsoft para comunicación cliente-servidor de cómputo en nube usando una API de diseño asíncrono en código nativo C++.

Índice

  1. C++ Rest SDK 2.5.0 (pruebas de abril 2015).

Casablanca logoRecursos

  • XCode v6.2 (6C131e)
  • CMake v3.2.1
  • C++ Rest SDK 2.5.0
  • OpenSSL v0.9.8zc 15 Oct 2014
  • Boost v1.57.0
  • OS X 10.9.5

Como un ejercicio para aprender como integrar proyectos C++ en XCode seguí las instrucciones que Denis Gladkikh1 ha puesto al respecto (y de aquí en adelante referidas como “las instrucciones“) en su blog de cómo proceder con la construcción del proyecto Casablanca mediante XCode. Está página no pretende ser una traducción de la página de Denis Gladkikh sino un registro de una experiencia personal y, quizás,  un breve complemento a ésta.

Preparativos

En las instrucciones se indica hacer uso de Homebrew, para instalar las bibliotecas necesarias. Si no se cuenta con Homebrew, éste puede ser descargado e instalado fácilmente con la información proporcionada en la página de esta utilería.

En las instrucciones se indica que se procederá también con la descarga e instalación de  git, con el cual ya contaba, así que fue omitido de las utilerías instaladas en el siguiente comando:

$ brew install cmake openssl boost
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.2.1.mavericks.bottl
######################################################################## 100.0%
==> Pouring cmake-3.2.1.mavericks.bottle.2.tar.gz
🍺 /usr/local/Cellar/cmake/3.2.1: 1847 files, 32M
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2a-1.mavericks.
######################################################################## 100.0%
==> Pouring openssl-1.0.2a-1.mavericks.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs


and run
/usr/local/opt/openssl/bin/c_rehash


This formula is keg-only, which means it was not symlinked into /usr/local.


Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.


Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries


Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:


LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include


==> Summary
🍺 /usr/local/Cellar/openssl/1.0.2a-1: 463 files, 18M
==> Downloading https://homebrew.bintray.com/bottles/boost-1.57.0.mavericks.bott
######################################################################## 100.0%
==> Pouring boost-1.57.0.mavericks.bottle.tar.gz
🍺 /usr/local/Cellar/boost/1.57.0: 10572 files, 439M
$

Interesante la advertencia sobre OpenSSL (y seguramente derivada de los recientes problemas detectados con éste)


$ git clone https://git01.codeplex.com/casablanca


Cloning into 'casablanca'...
remote: Counting objects: 16726, done.
remote: Compressing objects: 100% (7797/7797), done.
remote: Total 16726 (delta 12072), reused 12363 (delta 8654)
Receiving objects: 100% (16726/16726), 4.23 MiB | 208.00 KiB/s, done.
Resolving deltas: 100% (12072/12072), done.
Checking connectivity... done.
$ cd casablanca
$ mkdir build.release
$ cd build.release
$ cmake ../Release -DCMAKE_BUILD_TYPE=Release -G Xcode
-- The C compiler identification is AppleClang 6.0.0.6000057
-- The CXX compiler identification is AppleClang 6.0.0.6000057
-- Check for working C compiler using: Xcode
-- Check for working C compiler using: Xcode -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler using: Xcode
-- Check for working CXX compiler using: Xcode -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Boost version: 1.57.0
-- Found the following Boost libraries:
-- random
-- chrono
-- system
-- thread
-- locale
-- regex
-- filesystem
-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Found OpenSSL: /usr/local/Cellar/openssl/1.0.2a-1/lib/libssl.dylib;/usr/local/Cellar/openssl/1.0.2a-1/lib/libcrypto.dylib (found suitable version "1.0.2a", minimum required is "1.0.0")
-- Setting clang options
-- Added test library httpclient_test
-- Added test library httplistener_test
-- Added test library json_test
-- Added test library pplx_test
-- Added test library streams_test
-- Added test library uri_test
-- Added test library utils_test
-- Added test library websocketclient_test
-- Configuring done
CMake Warning (dev):
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake
--help-policy CMP0042" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.


MACOSX_RPATH is not specified for the following targets:


common_utilities
cpprest
httpclient_test
httplistener_test
httptest_utilities
json_test
pplx_test
streams_test
unittestpp
uri_test
utils_test
websocketclient_test
websockettest_utilities


This warning is for project developers. Use -Wno-dev to suppress it.


-- Generating done
-- Build files have been written to: ...casablanca/build.release
$

Compilación

Abriendo el archivo de proyecto XCode generado (ubicado en el directorio señalado en la última línea en el listado previo)

$ open casablanca.xcodeproj

se lanzará el IDE XCode mostrando al proyecto y sus componentes. Estos son revisados por XCode. En mi caso hubo sólo un warning.

Casablanca en XCode

que indicaba:

Warning de XCode sobre Casablanca

sugerencia que parecía apropiada por lo que se decidió aceptarla.

El proceso de compilación no presentó mayor problema, salvo por una serie de advertencias en algunos módulos, derivados del orden en el que son inicializados con respecto a cómo los miembros aparecen en cada clase. Esto es un comportamiento del compilador no una característica del lenguaje de programación C++ y no necesariamente una falla de diseño. Puede ser controlado para saber si se advierte sobre posibles dependencias entre variables y si es el caso que necesite saberse. Por ejemplo:

Class C {
      int a;
      int b;

      C():b(1),a(2){} //warning, should be C():a(2),b(1)
}

lo que también se puede controlar con la bandera -Wno-reorder.

Finalmente, el programa puede ser ejecutado dentro de XCode o desde la línea de comando localizando, dentro del directorio casablanca, a los programas ejecutables en el directorio build.release/Binaries (dependiendo del esquema de compilación usado con XCode).

Referencias

  1. Denis Gladkikh, “How to use Xcode with almost any C++ project,” outcoldman.com blog, posted: 2014.05.02, consulted: 2015.04.12. URL: http://outcoldman.com/en/archive/2014/05/02/xcode-and-cmake/.
  2. C++ REST SDK,” CodePLex, updated: 2015.03.18, consulted: 2015.04.13. URL: https://casablanca.codeplex.com/.