Использование MSBuild для компиляции одного файла cpp - PullRequest
9 голосов
/ 13 ноября 2010

Я могу собрать весь проект, вызвав MSBuild из командной строки:

C:\MyProject>MSBuild MyProject.vcproj

Однако я не нашел никакой информации о компиляции одного файла.По сути, я хотел бы сделать что-то вроде

C:\MyProject>MSBuild MyProject.vcproj /t:Compile:MySourceFile.cpp

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

Есть ли способ добиться этого?

И, пожалуйста, не предлагайте использовать 'make' или 'ant'или что-то еще, мне конкретно нужен MSBuild.Спасибо

1 Ответ

8 голосов
/ 13 ноября 2010

MSBuild в VS2008 использует VCBuild для выполнения реальной работы, а VCBuild не имеет никакой известной мне опции для создания одного файла. (с VS2010 это изменилось, там вы можете вызвать компиляцию одного файла, используя что-то вроде "/t:ClCompile "p:/SelectedFiles="main.cpp")

Я могу предложить некоторые идеи, которые, безусловно, будут работать, но потребуют дополнительной работы и не очень просты:

  • вы можете msbuild вызвать inviv devenv для компиляции одного файла:

    devenv myproject.sln /Command "File.OpenFile myfile.cpp" /Command "Build.Compile" /Command "File.Exit"
    

    это действительно открывает окно IDE, и довольно сложно определить, действительно ли компиляция удалась или нет.

  • заставил msbuild вызвать скрипт / программу, которая анализирует vcproj и делает копию со всеми удаленными источниками в разделе «Исходный файл», кроме одного файла, который вы хотите скомпилировать. Затем попросите msbuild построить этот проект, используя vcbuild / pass1 (pass1 = только компиляция, без ссылки).

  • всегда сохраняйте файл ответов, имеющий те же параметры, что и ваш vcproj, и позволяйте msbuild вызывать cl для компиляции одного файла, используя файл ответов. (создать файл ответов так же просто, как открыть свойства проекта в VS, перейти на C ++ -> CommandLine и скопировать все перечисленное)

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