Перед тем, как писать код, ознакомьтесь с правилами сдачи.
Это наиболее простой алгоритм заставить всё работать. Если вы хотите как-то поменять рабочее окружение, всё на вашей ответственности.
- Склонируйте локально этот репозиторий и ваш "форк" репозитория шаблонов решений в одну папку. В итоге рядом должны лежать две папки с соответствующими репозиториями,
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, то всё должно работать само.