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 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 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.
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.)
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.