Как стать автором
Обновить

Как писать на Objective-C в Linux (с использованиям системы сборки CMake и автодополнением)

Время на прочтение2 мин
Количество просмотров2.9K

Я использую дистрибутив Ubuntu 20.04.3 LTS и Ubuntu 18.04 LTS

Установка нужных пакетов и компиляторов

Будем использовать компилятор clang. Можно и gcc, но не все фичи будут работать(например блоки).

sudo apt-get install \
build-essential \
gobjc gobjc++ \
gnustep gnustep-devel \
libgnustep-base-dev \
clang gcc cmake git \
libblocksruntime-dev vim \
python3-dev -y

Инициализация проекта

Создаем файл CMakeLists.txt

# CMakeLists.txt 
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)

cmake_minimum_required(VERSION 3.0.0)
project(HelloWorld) # Имя проекта

SET(CMAKE_C_COMPILER clang)
SET(CMAKE_CXX_COMPILER clang++)

add_executable(HelloWorld 
	# Исходные файлы проекта
)

# Библиотеки для подключения
target_compile_options(HelloWorld PRIVATE 
	-MMD 
	-MP 
	-DGNUSTEP 
	-DGNUSTEP_BASE_LIBRARY=1 
	-DGNU_GUI_LIBRARY=1 
	-DGNU_RUNTIME=1 
	-DGNUSTEP_BASE_LIBRARY=1
	-fno-strict-aliasing 
	-fexceptions 
	-fobjc-exceptions 
	-D_NATIVE_OBJC_EXCEPTIONS 
	-pthread 
	-fPIC 
	-Wall 
	-DGSWARN 
	-DGSDIAGNOSE 
	-Wno-import 
	-g
	-fblocks	
	-O2 
	-fgnu-runtime 
	-fconstant-string-class=NSConstantString 
	-I. 
	# Dirs of GNUstep and libobj
	-I/home/ani/GNUstep/Library/Headers 
	-I/usr/local/include/GNUstep 
	-I/usr/include/GNUstep 
	-I./libobjc2
)

target_link_libraries(HelloWorld gnustep-base objc BlocksRuntime)

target_include_directories(HelloWorld PRIVATE usr/include/GNUstep/)

Инициализация Runtime библиотеки для Obj-C

В папку проекта клонируем библиотеку с github'а:

git clone https://github.com/gnustep/libobjc2

Далее билдим её:

cd libobjc2
git submodule init && git submodule update
mkdir Build && cd Build
cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
make -j8
sudo -E make install

Первый запуск

В папке проекта создаем файл main.m и кидаем в него такой код:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
	@autoreleasepool
	{
	
		NSLog(@"Hello World");

	}
  return 0;
}

После этого в cmake в строчку add_executable добавляем файл main.m.
Переходим в папку проекта, вводим:

cmake .
make
./НазваниеПроекта

Ура. Вы запустили свой первый Obj-C код на Linux

Настройка среды

Я буду использывать текстовый редактор vim.

То, как будет выглядеть автодополнение
Вот пример того как ето должно выглядеть
Вот пример того как ето должно выглядеть

Обновим vim:

sudo add-apt-repository ppa:jonathonf/vim  
sudo apt update 
sudo apt install vim  


Установим этот конфиг файла .vimrc

Для установки всех плагинов, сначала нужно скачать библиотеку плагинов:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Далее запустить vim и в command mode напичатать: :PlugInstall

После нужно настроить ycm файл YouCompleteMe.
Кидаем этот конфиг в папку ~/.vim/
Нужно скомпилировать библиотеку YouCompleteMe

cd ~/.vim/plugged/youcompleteme
python3 install.py --clang-completer

Ребилдим obj-c проект. Готово. Наслаждайтесь

П.С.

При установке библиотеки YouCompleteMe могут быть ошибки версии cmake и g++

Вот ссылки на решения:
https://askubuntu.com/questions/355565/how-do-i-install-the-latest-version-of-cmake-from-the-command-line
https://stackoverflow.com/questions/65284572/your-c-compiler-does-not-fully-support-c17

Теги:
Хабы:
Рейтинг0
Комментарии4

Публикации