Перед тем, как писать код, ознакомьтесь с правилами сдачи.
Это наиболее простой алгоритм заставить всё работать. Если вы хотите как-то поменять рабочее окружение, всё на вашей ответственности.
- Склонируйте локально этот репозиторий и ваш "форк" репозитория шаблонов решений в одну папку. В итоге рядом должны лежать две папки с соответствующими репозиториями,
metaprogramming-courseиmetaprogramming-course-solutions. Не меняйте их имена, иначе конфиги полетят - Установите vscode и docker
- Откройте vscode, установите расширения "Docker" и "Dev Containers"
- Внутри vscode выполните команду (Ctrl-Shift-P) "Open Workspace In Container" и выберете файл
solutions.code-workspaceиз корня репозитория курса. На всплывшем варнинге нажмите "continue" - vscode немножко подумает и откроет вам воркспейс с двумя репозиториями. Код пишем в одном, запускаем в другом. Все расширения установятся автоматом, должно работать "из коробки"
- Выберете тулкит clang на нижней панеле. В некоторых задачх его возможно придётся менять на gcc, но будем надеяться, что свежий шланг не такой вялый как год назад
- ВНИМАНИЕ: на нижней панеле слева есть значёк папочки, рядом с которым написано
metaprogramming-courseилиsolutions. Убедитесь, что на нём выбрано первое, иначе vscode будет пытаться билдить не ту папку. Флажка конфигурации для автоматизации этого выбора к сожалению пока не завезли.
Вариант для мощных ребят, готовых делать всё самостоятельно. Ожидается, что вы знаете об LSP и способны самостоятельно подключить его к своему редактору.
- Создайте/выберите папку, в которой будете вести всю работу по курсу.
- Склонируйте локально 1) этот репозиторий и 2) ваш "форк" репозитория шаблонов решений в одну папку. В итоге рядом должны лежать две папки с соответствующими репозиториями,
metaprogramming-courseиmetaprogramming-course-solutions. Не меняйте их имена, иначе конфиги полетят. - Положите в папку файл с названием
shell.nix, содержащий следующийnix-код:let pkgs = import <nixpkgs> {}; in pkgs.clangStdenv.mkDerivation { name = "env"; nativeBuildInputs = with pkgs; [ clang-tools cmake ninja gdb ]; buildInputs = with pkgs; [ python3 ]; }
- Создайте и войдите в
nix-окружение при помощи командыnix-shell
Далее поэтапно описан вариант того, как можно заставить clangd понимать наш проект. Очевидно, папки можно было бы положить и в другие места.
- Заходим в
metaprogramming-course/tasks - Выполняем
mkdir build && cd build && cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DTASK=? -DREPOSITORY_PATH=? -DNOCOMPILE=?(где?надо заменить на соответствующие параметры, смотри ниже) - Добавляем ссылку на сгенерированный
compile_commands.jsonв папку задачи в репозитории с решениями (например, черезln -s) - Открываем оттуда редактор и наслаждаемся жизнью
Все флаги для cmake при разработке выставляются в файле .vscode/settings.json в случае использования vscode и устанавливаются при запуске команды cmake .. в ручном режиме работы.
- Cmake по-отдельности собирает каждую задачу. Чтобы поменять решаемую вами задачу, поменяйте название задачи
Nво флаге-DTASK=N. Пример:-DTASK=span - К некоторым задачам могут быть тесты, которые не должны компилироваться. Чтобы попытаться их "собрать", добавьте опцию
-DNOCOMPILE=ONи компилируйте таргеты в названии которых есть словоnocompile. - Путь к репозиторию с решениями выставляется флагом
-DREPOSITORY_PATH=..., но если вы используете контейнер и vscode, то всё должно работать само.