Как редактировать Visual Studio CUDA nvcc.exe Командная строка - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно отредактировать командную строку Visual Studio для этапа сборки компилятора NVidia CUDA nvcc.exe, однако его нельзя редактировать.

Я уверен, что этот вопрос был задан, но это сложно, потому что, если я что-то ищу с помощью «Командной строки», он возвращает сотни статей о том, как просто использовать внешнюю компиляцию командной строки, а не из VS.

Файлы NVidia CUDA * .cu имеют разные командные строки для этапов компиляции и компоновки, и если перейти к свойствам проекта Visual Studio, «Конфигурационные свойства», CUDA C / C ++, «Командная строка», их нельзя редактировать.

Я искал часть текста командной строки в папке инструментария NVidia и нашел это.

C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.1 \ extras \ visual_studio_integration \ MSBuildExtensions \ CUDA 10.1.props

Кажется, этот файл определяет шаг сборки, но если я отредактирую его и перезапущу Visual Studio, ничего не изменится. Кажется, он использовался только во время установки CUDA. Я попытался открыть различные файлы VS, такие как project.user, но командная строка nvcc нигде не определена в файлах решения. Кроме того, нет смысла изменять определение запускаемого проекта, поскольку мне нужно иметь возможность добавить обработку CUDA GPU в мой существующий проект.

Кто-нибудь из вас, гуру Visual Studio, мог редактировать командную строку для сторонних компиляторов, и если да, то как? Большое спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы просто редактируете его, как и любой другой инструмент сборки в Visual Studio: редактируя свойства.Категория командной строки в свойствах проекта на самом деле просто для того, чтобы показать вам, как будет выглядеть команда на основе заданных вами свойств.Весь смысл наличия свойств состоит в том, что вы просто устанавливаете свойства, и среда IDE переводит эти свойства в правильную командную строку для конкретного инструмента, а не задает командную строку напрямую…

Файл .props сборкиНастройка устанавливает свойства по умолчанию для использования для типов элементов, связанных с этой настройкой сборки.Тот, который фактически используется, должен быть установлен в каталоге MSBuild, например, C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations.Я бы посоветовал не редактировать этот файл напрямую, так как он устанавливает системные значения по умолчанию.Если вы хотите изменить значения по умолчанию для своего проекта, просто отредактируйте свойства проекта CUDA C / C ++ (т. Е. Выберите проект в обозревателе решений и измените его свойства, а не свойства отдельного файла .cu).

Свойства в Visual Studio построены по слоям (строго говоря, здесь речь идет о метаданных элемента, а не о свойствах, но это незначительная техническая составляющая, которая здесь не должна иметь значения).Внизу у вас есть определения свойств по умолчанию, которые проект импортирует для всех своих инструментов сборки.Вдобавок к этому у вас есть определения свойств всего проекта.И каждый элемент (файл) в рамках проекта может иметь свои собственные определения свойств.Набор свойств для каждого элемента представляет собой комбинацию всех свойств, определенных для этого типа элемента (например, файла CUDA C / C ++), а также любого конкретного определения элемента, где последнее определение перезаписывает предыдущие.Когда вы видите свойство, отображаемое жирным шрифтом в диалоговом окне свойств Visual Studio, это означает, что это конкретное значение свойства перезаписывается на этом уровне.Не выделенные жирным шрифтом свойства наследуются от нижележащих слоев.Так, например, свойство bold в свойствах проекта означает, что параметр перезаписывается поверх свойства по умолчанию, получаемого при интеграции сборки.Свойство, выделенное жирным шрифтом на уровне элемента, означает, что свойство перезаписывается для этого элемента поверх свойств всего проекта.Дальнейшая настройка возможна, например, путем определения ваших собственных листов свойств, которые позволяют вам добавлять свои собственные слои определений свойств.Списки свойств также представляют собой отдельные файлы, которые можно импортировать в несколько проектов, например, для совместного использования общих настроек.Просто откройте Диспетчер свойств («Просмотр»> «Диспетчер свойств»), чтобы просмотреть все отдельные таблицы свойств в вашем проекте на данный момент и, например, добавить свой собственный…

0 голосов
/ 24 марта 2019

Я выкладываю ответ на свой вопрос здесь после его решения, поэтому, если у других возникнет такая же проблема, они смогут найти простое решение здесь.

Как вы можете видеть выше, командная строка компилятора nvcc.exe не редактируется, потому что это просто функция различных других редактируемых свойств.

Однако единственная причина, по которой я хотел отредактировать командную строку nvcc, заключалась в следующей ошибке компилятора:

1> nvcc fatal: один файл ввода необходим для фазы без связи, если указан файл вывода

Компилятор NVidia CUDA nvcc.exe работал правильно для моей сборки отладки Visual Studio, но каждый раз приводил к ошибке с вышеупомянутой ошибкой для любой сборки выпуска.

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

Когда я удалил все пробелы в именах сборки конфигурации Visual Studio, проблема полностью исчезла!

Очевидно, компилятор nvcc.exe не может обрабатывать пробелы в именах сборок конфигурации, несмотря на использование двойных кавычек вокруг них во всех ссылках командной строки. Следовательно, эта проблема, вероятно, является чем-то внутренним для компилятора nvcc и никогда не была обнаружена NVidia просто потому, что большинство людей достаточно умны, чтобы не использовать пробелы в именах своих сборок.

Итог, не используйте пробелы в именах сборок конфигурации VS, и у вас не возникнет этой проблемы с компилятором NVidia CUDA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...