2010-11-13 78 views
8

我可以從命令行調用的MSBuild編譯整個項目:使用的MSBuild編譯一個CPP文件

C:\MyProject>MSBuild MyProject.vcproj 

但是我沒有找到有關編譯單個文件的任何信息。 在本質上,我想這樣做

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

我不想直接使用「cl.exe時」的命令行,因爲這將迫使我定義cl.exe時所有相關的命令行選項和所有的環境變量,MSBuild已經爲我做的任務。

有什麼辦法可以達到這個目的嗎?

請不要使用'make'或'ant'或其他什麼,我特別需要MSBuild。 謝謝

+0

潛在的有趣的[C#選項](http://blogs.msdn.com /b/dotnetinterop/archive/2008/04/08/msbuild-script-for-compiling-all-cs-files-into-a-single-assembly-dll-or-exe.aspx)。因人而異。 – ruffin 2014-09-25 15:09:15

回答

8

VS2008中的MSBuild使用VCBuild來完成實際的工作,而VCBuild沒有我知道的構建單個文件的選項。 (在VS2010中,這已經發生了變化,您可以使用類似於"/t:ClCompile "p:/SelectedFiles="main.cpp"的方式調用單個文件的編譯)

我可以想出一些肯定會起作用的想法,但需要一些額外的工作,而且不是非常簡單:

  • 可以MSBuild的有無調用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並複製列出的所有內容)