Custom Build System не отображается при установке на Автоматический - PullRequest
0 голосов
/ 01 октября 2019

Я написал собственную систему сборки для компиляции и запуска файла cpp, как показано ниже:

{
    "cmd": [
        "clang++",
        "-o",
        "$file_base_name.out",
        "$file",
        "&&",
        "./$file_base_name.out"
    ],
    "selector": "source.cpp",
    "quiet": true
}

Это не отображается в системах автоматической сборки, что, как я полагаю, связано с selectorне быть признанным. Что мне нужно изменить?

1 Ответ

1 голос
/ 01 октября 2019

На самом деле используемый вами селектор scope неверен;scope файлов C ++ - source.c++, а не source.cpp. Вы можете использовать Tools > Developer > Show Scope Name из меню (или соответствующей клавиши), пока вы редактируете файл, чтобы увидеть полную область в текущем местоположении курсора. Для системы сборки первая строка во всплывающей области видимости - это та, которую вы хотите использовать.

Есть еще одна проблема с вашей сборкой (о которой вы упоминали в комментариях), что сборка не работает должным образом,Причиной этого является то, что вы используете cmd для выполнения сборки, но вы используете конструкции оболочки (&&).

Когда вы указываете cmd в системе сборки, выпредоставить список строк;первый элемент - это имя программы, которую вы хотите выполнить (здесь это clang++), а остальные элементы - это аргументы, которые должны быть переданы выполняемой программе.

Так что в этом случае вы 'Вы просите Sublime выполнить clang++ напрямую, и один из аргументов, которые вы ему предоставляете, это &&, который, как предполагается, является именем файла. Намерение состоит в том, чтобы попытаться запустить программу, если она успешно скомпилируется, но использование && является функцией вашей оболочки (например, bash или подобной), а не clang.

Вы можете попробоватьдобавив "shell": true в вашу сборку, которая сообщает Sublime, что он должен попытаться выполнить cmd через системную оболочку;который передает все целиком в оболочку, которая знает, как обрабатывать &&.

Другая альтернатива - использовать shell_cmd вместо этого;в этом случае вы предоставляете одну строку, представляющую командную строку, которую вы вводите в терминал. В этом случае при выполнении сборки Sublime автоматически передает значение в оболочку для выполнения.

В вашем случае это может выглядеть следующим образом:

"shell_cmd": "clang++ -o \"${file_base_name}.out\" \"$file\" && \"./${file_base_name}.out\"",

Помимо значения, являющегосяв одну строку, также важно отметить, что если ваши имена файлов могут содержать пробелы, вам нужно заключить все аргументы имени файла в двойные кавычки, чтобы оболочка обрабатывала все правильно.

...