#visual-studio #msbuild
#visual-studio #msbuild
Вопрос:
Я хочу определить свою собственную цель компиляции, аналогичную целям ClCompile или ResourceCompile.
Как я это делаю? Я попробовал следующее, но кнопка «Скомпилировать» не отображается в контекстном меню VisualStudio для этого файла.
<Target Name="MyCompile">
<Exec Command="test"/>
</Target>
<ItemGroup>
<MyCompile Include="testfile"/>
</ItemGroup>
Комментарии:
1. Привет, уменьшено некоторое содержание непонимания этой проблемы. И если у вас есть какие-либо обновления по работе, пожалуйста, не стесняйтесь поделиться здесь.
Ответ №1:
Правильное поведение. Вы не можете просто добавить пользовательское расширение пользовательского интерфейса (щелкните правой кнопкой мыши меню и поддержку сборки) в пользовательский интерфейс Visual Studio, просто определив свои собственные пользовательские ItemGroups. Если вам нужна помощь Visual Studio для компиляции стандартных файлов кода (например, * .cs, * .cpp и т. Д.), Вы должны использовать ClCompile.
Ответ №2:
Но кнопка «Скомпилировать» не отображается в контекстном меню VisualStudio. Я хочу определить свою собственную цель компиляции, аналогичную целям ClCompile или ResourceCompile.
Кнопка компиляции (для проекта C ) будет включена для тех файлов, которые включены в элементы, определенные VS, такие как ClCompile или ResourceCompile.
Чтобы получить пользовательскую цель (не уверен, но я думаю, что это сложнее, чем одна цель), работающую как ClCompile. Это может быть довольно сложной задачей.Я думаю, что для проекта на C параметр компиляции относится не только к цели компиляции или элементу.
Я прокомментировал некоторые xxx.targets и xxx.props и обнаружил, что даже некоторые файлы включены в ClCompile Itemgroup, компиляция будет отключена, поэтому я думаю, что меню компиляции проверит что-то еще глубоко в структуре msbuild.
Обновить:
Откуда VS знает, что он может отображать пункт меню «Компиляция» для a.cpp ?
Параметры компиляции примерно такие, как показано ниже:
После моей проверки я обнаружил, что это как-то связано с Microsoft.Cpp.DesignTime.targets
which contains targets that are only used by IDE and not the real build
и может быть найдено в $ (VCTargets) path . Но я не уверен в этом пункте. Для этого, я думаю, включено ли меню компиляции или нет, vs проверит не только ItemGroup, но и что-то предварительно определенное в xxx.targets.
И для вашей ситуации, после нашего чата, compile
меню в проекте C на самом деле не то, что вам нужно, поскольку оно предназначено только для .vcxproj. Возможно, генерация кода может удовлетворить ваши потребности.
Комментарии:
1. Я имею в виду щелчок правой кнопкой мыши по файлу, а не по проекту. Откуда VS знает, что он может отображать пункт меню «Компиляция» для a.cpp ?
2. @NN_ Значимый, но сложный вопрос. Теперь я думаю, что понимаю, что вы хотите знать. Я поделюсь своей идеей об этом в обновлении, надеюсь, это поможет.
3. Спасибо. в vcxproj есть цель CustomBuildTool, которую вы можете использовать для файлов, но я хотел бы иметь общее решение.
4. @NN_ Да, вы можете использовать цель в файле .vcxproj для настройки процесса сборки. Но это две разные вещи, например, кнопка MyCompile при щелчке правой кнопкой мыши на вашем файле, как упоминал Джонсон выше. Для достижения вашей цели, я думаю, вам нужно расширение, чтобы добавить опцию MyCompile в обозреватель решений, затем в нем execute mothed или что-то вроде click-event есть некоторый код для запуска вашего пользовательского компилятора, но, я думаю, это довольно сложно. Надеюсь, это поможет.
5. Я ищу решение, которое не связано с расширением VS. Что-то, что можно сделать исключительно с помощью MSBuild.