MSBuild使用初步

2021-08-26 16:11:21 字數 2698 閱讀 8388

了解一下msbuild工程檔案的基本結構,作為練習,用它編譯乙個用到qt庫的c++控制台程式

乙個簡單的例子:

// file: hello.cs

using system;

class csharptest

}

如果直接用命令列的話,可以直接這麼編譯:

csc /out:hello_cs.exe hello.cs

可是如果我想用msbuild,工程檔案怎麼寫呢?

恩,大致可以這樣:

而後直接

msbuild hello.csproj

即可。

乙個工程中可以有多個目標(target),如果這樣的話,我們需要指定執行哪乙個(和nmake是類似的)

msbuild hello.csproj /t:compile

也可以在project的屬性中指定

每乙個目標(target)由若干個任務(task)組成。比如:

然後我們

msbuild hello.csproj /t:compile2

這樣在編譯命令前後分別輸出一條資訊。其中csc和message都是msbuild內建的task

前面的東西太簡陋了,一般情況下,我們需要將一些東西分開設定,也就是需要變數或巨集一類的東西

這兒引入的property(屬性)和item這兩個東西。

用visual studio建立乙個具體的c#控制台工程,然後開啟看看

<?xml version="1.0" encoding="utf-8"?>

......

真夠複雜的,儘管大量東西都隱藏在microsoft.csharp.targets中了

簡單的qt的例子:

int main(int argc, char **argv)

使用命令行時,只需:

e:\msbuild>cl hello.cpp /id:\qt\4.7.3\include  /link  /libpath:d:\qt\4.7.3\lib qtcore4.lib qtgui4.lib

現在我想試試msbuild,可以快速寫個工程檔案 hello.qtproj ?

現在,我們在裡面指定了:

但是我們需要有乙個task來做這件事情

為了讓我們前面的qtc能工作,需要先為msbuild寫個task外掛程式

using system;

using system.collections.generic;

using system.diagnostics;

using microsoft.build.framework;

using microsoft.build.utilities;

namespace dbzhang800

arguments.add(string.format("/fe", outputname));

arguments.add(string.format("/i\\include", qtdir));

arguments.add(string.format("/link /libpath:\\lib", qtdir));

foreach (string part in partsname)

4.lib", part));

}process proc = new process();

proc.startinfo.useshellexecute = false;

proc.startinfo.filename = "cl";

proc.startinfo.arguments = string.join(" ", arguments.toarray());

proc.start();

console.writeline("", string.join(" ", arguments.toarray()));

return true;

}private string outputname;

public string output

set

}private string sourcesname;

public string sources

set

}private string partsname;

public string qtparts

set }}

}

這是乙個c#檔案,編譯成dll檔案

csc /target:library /r:microsoft.build.framework.dll;microsoft.build.utilities.v3.5.dll qttask.cs

而後在工程 hello.qtproj 中註冊一下這個task

...

...

現在,總算可以用

msbuild test.qtproj

來生成我們的qt程式了

msbuild 語法 MSBuild入門(續)

msbuild基本概念 續 msbuild特殊字元 msbuild保留的一些字元,以及xml中的特殊字元處理。msbuild條件 condition特性,作用類似於c 的if。msbuild屬性 使用環境變數 保留屬性 全域性屬性。msbuild任務 itask介面 usingtask 自定義任務 ...

msbuild 語法 MSBuild 命令引數

build a visual studio project or solution using msbuild command line arguments 常用命令行引數 詳解 msbuild version 配置的 msbuild.exe msbuild build file 是需要發布專案的專...

使用構建工具MSBUILD

如果安裝了visual studio,缺省會在目錄 windir microsoft.net framework version 下有乙個msbuild.exe的工具,如果是64位作業系統,在 windir microsoft.net framework64 version 下也會有。如果沒有安裝v...