Configurer un environnement de développement Objective-C 2.0 sur Linux

Cela fait longtemps que la tendance s'est déplacée vers Swift, et le nombre de personnes intéressées par Objective-C a diminué ces dernières années, mais voici un résumé de la mise en place d'un environnement de développement Objective-C sous Linux.

Il a été testé sur Ubuntu 18.04 et 19.10 sur Docker. Si vous extrayez le contenu de «ENV» et «RUN» dans le Dockerfile, cela fonctionnera sur la machine réelle.

Si Objective-C 1.0 convient ...

Si vous êtes satisfait de l'ancien Objective-C 1.0, vous pouvez configurer un environnement de développement Objective-C avec Clang 9 relativement facilement en installant les paquets prêts à l'emploi disponibles avec apt.

Dockerfile


FROM ubuntu:19.10

RUN set -x \
  && apt update \
  && apt upgrade -y \
  && DEBIAN_FRONTEND=noninteractive apt install -y tzdata \
  && apt install -y clang-9 make gobjc-9 gnustep-devel \
  && apt autoremove -y \
  && apt clean \
  && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

# Set alias
RUN echo 'alias clang-objc="clang-9 \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -lgnustep-base -I/usr/lib/gcc/x86_64-linux-gnu/9/include"' > ~/.bashrc

CMD ["/bin/bash"]

L'essence est

$ apt install -y clang-9 make gobjc-9 gnustep-devel

est. Aussi, dans ~ / .bashrc

alias clang-objc="clang-9 \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -lgnustep-base -I/usr/lib/gcc/x86_64-linux-gnu/9/include"

Il est défini comme. Cela vous permet de le faire dans ce conteneur Docker

$ clang-objc -o hoge hoge.m
$ ./hoge

Vous pouvez facilement compiler et exécuter la source Objective-C hoge.m en faisant cela.

Si vous souhaitez utiliser toutes les fonctionnalités d'Objective-C 2.0 ...

Si vous voulez profiter pleinement des fonctionnalités d'Objective-C modernes telles que, vous devez configurer la libobjc2 de GNUstep. Il ne peut pas être installé avec apt et doit être construit à partir des sources. C'est assez difficile. Le référentiel GitHub de Plaurent a été très utile. La procédure de construction peut être résumée dans un Dockerfile comme suit.

Dockerfile


FROM ubuntu:19.10

ENV CC clang-9
ENV CXX clang++-9
ENV CXXFLAGS -std=c++11
ENV RUNTIME_VERSION gnustep-2.0
ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
ENV LD /usr/bin/ld.gold
ENV LDFLAGS "-fuse-ld=/usr/bin/ld.gold -L/usr/local/lib"

WORKDIR /GNUstep-build

RUN set -x \
  && apt update \
  && apt upgrade -y \
  && apt install -y git sudo clang-9 clang++-9 build-essential wget \
    subversion cmake libffi-dev libxml2-dev \
    libgnutls28-dev libicu-dev libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev autoconf libtool \
    libjpeg-dev libtiff-dev libffi-dev libcairo-dev libx11-dev libxt-dev libxft-dev \
  && apt autoremove -y \
  && apt clean \
  && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

# Build GNUstep make
RUN set -x \
    #
    # Checkout tools-make
    && git clone https://github.com/gnustep/tools-make.git \
    #
    # Build GNUstep make
    && cd tools-make \
    && CC=${CC} ./configure \
            --with-layout=gnustep \
            --disable-importing-config-file \
            --enable-native-objc-exceptions \
            --enable-objc-arc \
            --enable-install-ld-so-conf \
            --with-library-combo=ng-gnu-gnu \
    && make -j8 \
    && sudo -E make install \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    && echo ". /usr/GNUstep/System/Library/Makefiles/GNUstep.sh" >> ~/.bashrc \
    && echo "export RUNTIME_VERSION=gnustep-2.0" >> ~/.bashrc \
    && echo 'export CXXFLAGS="-std=c++11"' >> ~/.bashrc \
    && cd .. \
#
# Build libdispatch
    #
    # Checkout swift-corelibs-libdispatch
    && git clone https://github.com/apple/swift-corelibs-libdispatch \
    && cd swift-corelibs-libdispatch \
    && git checkout swift-5.1.1-RELEASE \
    #
    # Build libdispatch
    && rm -Rf build \
    && mkdir build \
    && cd build \
    && cmake .. \
         -DCMAKE_C_COMPILER=${CC} \
         -DCMAKE_CXX_COMPILER=${CXX} \
         -DCMAKE_BUILD_TYPE=Release \
         -DUSE_GOLD_LINKER=YES \
    && make \
    && sudo -E make install \
    && sudo ldconfig \
    && cd ../.. \
#
# Build libobjc2
    #
    # Checkout libobjc2
    && git clone https://github.com/gnustep/libobjc2.git \
    && cd libobjc2 \
    && git submodule init \
    && git submodule sync \
    && git submodule update \
    #
    # Build libobjc2
    && rm -Rf build \
    && mkdir build \
    && cd build \
    && cmake .. \
         -DCMAKE_C_COMPILER=${CC} \
         -DCMAKE_CXX_COMPILER=${CXX} \
         -DCMAKE_ASM_COMPILER=${CC} \
         -DTESTS=OFF \
    && cmake --build . \
    && sudo -E make install \
    && sudo ldconfig \
    && cd ../.. \
#
# Build GNUstep make second time
    && cd tools-make \
    && CC=${CC} ./configure \
            --with-layout=gnustep \
            --disable-importing-config-file \
            --enable-native-objc-exceptions \
            --enable-objc-arc \
            --enable-install-ld-so-conf \
            --with-library-combo=ng-gnu-gnu \
    && make -j8 \
    && sudo -E make install \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    && cd .. \
#
# Build GNUstep base
    #
    # Checkout libs-base
    && git clone https://github.com/gnustep/libs-base.git \
    #
    # Build GNUstep base
    && cd libs-base \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd .. 

# For GUI programming
#
# Build GNUstep GUI Library
RUN set -x \
    && . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh \
    #
    # Checkout libs-gui
    && git clone https://github.com/gnustep/libs-gui.git \
    #
    # Build GNUstep GUI Library
    && cd libs-gui \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd .. \
#
# Build GNUstep GUI Backend
    #
    # Checkout libs-back
    && git clone https://github.com/gnustep/libs-back.git \
    #
    # Build GNUstep GUI Backend
    && cd libs-back \
    && ./configure \
    && make -j8 \
    && sudo -E make install \
    && cd ..

WORKDIR /workdir

# Clean build directory
RUN rm -rf /GNUstep-build

# Set alias
RUN echo 'alias clang-objc="\${CC} \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -fobjc-arc -lobjc -ldispatch -lgnustep-base"' >> ~/.bashrc

CMD ["/bin/bash"]

C'était une longue procédure de construction ... Enfin vers ~ / .bashrc

alias clang-objc="\${CC} \$(gnustep-config --objc-flags) \$(gnustep-config --objc-libs) -fobjc-arc -lobjc -ldispatch -lgnustep-base"

Est défini, donc dans ce conteneur Docker

$ clang-objc -o hoge hoge.m
$ ./hoge

Vous pouvez facilement compiler et exécuter la source Objective-C 2.0 hoge.m en faisant cela.

Dockerfile et ensemble de fichiers de test

Le Dockerfile créé cette fois et l'ensemble des sources Objective-C pour les tests ont été téléchargés dans le GitHub Repository.

$ docker run --rm -it -v $(pwd):/workdir doratex/clang9-objc2:latest /bin/bash
# cd test
# ./test_all.sh

Ce faisant, vous pouvez tester diverses fonctionnalités d'Objective-C 2.0. (Cependant, le dernier test GUI des tests ne fonctionnera que s'il est connecté au serveur X Window System.)

Image Docker

L'image Docker créée cette fois est téléchargée dans Docker Hub Repository.

$ docker pull doratex/clang9-objc2:ubuntu1910

Vous pouvez l'utiliser si vous le faites.

Recommended Posts

Configurer un environnement de développement Objective-C 2.0 sur Linux
Configurer un environnement de développement Python sur Marvericks
Configurer l'environnement Python sur CentOS
Configurer Golang avec goenv sur GNU / Linux
Configurer un environnement Tornado pour Python dans Raspbian Jessie
Créer un environnement Arch Linux sur Raspai
Configurer l'environnement de développement TinyGo pour VS Code
Mettre en place un environnement de développement pour le traitement du langage naturel
Configurer Docker sur Oracle Linux (7.x) avec Vagrant
Créer un environnement pour MkDocs sur Amazon Linux (tentative)
[Partie 1] Configurons un serveur Micra sur Linux
Environnement de développement croisé (développement de programmes pour Windows sous Linux)
Configurer un environnement de développement Python avec Sublime Text 2
Configurer Python 3.4 sur Ubuntu
Développement de l'environnement Django sur Windows 10
Construction de l'environnement Linux (sur environnement WSL)
Configurer un environnement de développement Python avec Visual Studio Code
Créer un environnement de développement Ubuntu python sur Google Cloud Platform
Comment configurer WSL2 sur Windows 10 et créer un environnement d'étude pour les commandes Linux
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
Configurer OpenSSH dans Arch Linux
Configurer un environnement de développement Python sur Ubuntu
Créer un environnement Linux sur Windows 10
Construction de l'environnement de développement Python sur macOS
[Linux] Construction de l'environnement Docker sur Redhat
Installer l'environnement de développement Python sur Windows 10
Présentation de l'environnement Python 3.5.2 sur Amazon Linux
Exécutez cron sur Amazon Linux (défini sur Linux)
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
Créer un environnement de développement AWS Cloud9 sur une instance Amazon EC2
Comment configurer l'environnement de développement d'ev3dev [version Windows]
Ajout d'un environnement de développement local sur MacOS
J'ai créé un utilisateur uniquement SFTP sous Linux.
Définissez la variable d'environnement PYTHONPATH sur zsh
Créer un serveur NFS sur Arch Linux
Configurer Pipenv sur Pycharm dans un environnement Windows
Créer un environnement OpenCV3 + python3 sur OSX
Sur Ubuntu Linux, définissez Tab sur q
Installez rJava sur Linux dans un environnement R3.6.
Construire un environnement pour "Tello_Video" avec Raspbian
Création d'un environnement pour "Tello_Video" sous Windows
Introduisez VS Code et le développement à distance dans un environnement hors ligne pour rendre le développement Linux confortable
Créer un environnement pour matplotlib + cartopy sur un Mac
Créez un environnement de développement Python sur votre Mac
Définir une adresse IP fixe dans l'environnement Linux
Créer un environnement Kubernetes pour le développement sur Ubuntu
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Construire un environnement de développement Python sur Raspberry Pi
Définir le script de démarrage sur Linux (RasPi, Edison)
Créer un environnement de développement Python basé sur GVim sur Windows 10 (3) GVim8.0 et Python3.6
Créer un environnement OpenCV4 sur Raspberry Pi à l'aide de Poetry
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Configurer un serveur local simple sur votre Mac
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Configurer un serveur de fichiers sur Ubuntu 20.04 à l'aide de Samba
Création d'un environnement pour "Tello_Video" sur Mac OS X
Un mémo pour créer un environnement de développement python avec macOS Catalina
Créez un environnement de développement Python 3 (Anaconda) confortable avec Windows