# 关于 MSBuildCppCrossToolset - 在Linux、MacOS中编译vcxproj
[![license](https://img.shields.io/github/license/Chuyu-Team/MSBuildCppCrossToolset)](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/blob/master/LICENSE)
![downloads](https://img.shields.io/github/downloads/Chuyu-Team/MSBuildCppCrossToolset/total)
[![contributors](https://img.shields.io/github/contributors-anon/Chuyu-Team/MSBuildCppCrossToolset)](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/graphs/contributors)
[![release](https://img.shields.io/github/v/release/Chuyu-Team/MSBuildCppCrossToolset?include_prereleases)](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/releases)
[![Build](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/actions/workflows/Build.yml/badge.svg)](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/actions/workflows/Build.yml)
* QQ群:[860674930](https://qm.qq.com/cgi-bin/qm/qr?k=n4INZdXYqxCgTnTLE5vUmD6qOT6jBsiL&jump_from=webapi&authKey=rEvllm8VBBgAAevZS0IOaGmwYnqFGUPKxX5AjyLWhMIaiF5Ded3ooMKf++G8hLAD)
重要提示:VCTargets中的文件从 `Microsoft Visual Studio\?\?\MSBuild\Microsoft\VC` 提取,Microsoft拥有其所有权利。
重要提示:本项目还未完工……
本项目基于微软VCTargets修改,为MSBuild实现了跨平台编译vcxproj。相关VS配置高度抽象统一,并与目标编译器功能一比一映射。
> 举个例子:代码完全优化(Full选项),微软编译器时中映射为 `-Ox`,而使用GCC时则映射为`-O3`。
目前开发计划:
* [x] [Fea 5](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/issues/5), 添加最小化生成支持。
* [ ] 优化并行生成效率。
* [ ] 单元测试。
# 1. 兼容性
| 兼容的操作系统 | ApplicationType名称 | 支持的PlatformToolset(平台工具集)
| ---------------- | ------------------- | -----------------
| Linux | Linux | YY_Cross_GCC_1_0(默认值)、YY_Cross_Clang_1_0
| MacOS | OSX | YY_Cross_GCC_1_0、YY_Cross_Clang_1_0(默认值)
> 温馨提示:Windows系统由自己微软MSVC直接支持,所以这边不提供支持。
一般来说,vcxproj中的`ApplicationType`以及`PlatformToolset`无需设置,MSBuildCppCrossToolset会自动根据运行情况自动适应。
如果你想自行设置,请严格按上述表格中的值配置ApplicationType与PlatformToolset。
# 2. 使用方式
# 2.1. 安装 .NET SDK
下载地址:https://dotnet.microsoft.com/zh-cn/download
> 必须选择 .NET 6.0或者更高版本。
## 2.2. 配置 MSBuildCppCrossToolset
首先,我们从[Release](https://github.com/Chuyu-Team/MSBuildCppCrossToolset/releases)产物下载MSBuildCppCrossToolset并解压。
假设最终解压目录是`/home/john/Desktop/VCTargets`。我们执行下面这条命令:
```
export VCTargetsPath=/home/john/Desktop/VCTargets/v170/
```
它将临时添加`VCTargetsPath`环境变量,如果需要持久配置,请自行修改系统配置。
## 2.3. 编译vcxproj项目
我们也提供了示例项目,点击查看[Samples](Samples)
假设项目位置: `/home/john/Desktop/ConsoleApplication2/ConsoleApplication2.vcxproj`。并且编译 Release版的x86版本,那么可以输入如下命令:
```
; Linux、MacOS下编译 x64
dotnet msbuild '/home/john/Desktop/ConsoleApplication2/ConsoleApplication2.vcxproj' '-p:Configuration=Release;Platform=x64'
; Linux、MacOS下编译小端 ARM64
dotnet msbuild '/home/john/Desktop/ConsoleApplication2/ConsoleApplication2.vcxproj' '-p:Configuration=Release;Platform=ARM64'
; Windows下编译 x86。新人特别注意了,vcxproj里没有x86,只有Win32!!!
msbuild "D:\ConsoleApplication2\ConsoleApplication2.vcxproj" -p:Configuration=Release;Platform=Win32
; Windows下编译 x64
msbuild "D:\ConsoleApplication2\ConsoleApplication2.vcxproj" -p:Configuration=Release;Platform=x64
```
## 2.4. 全局支持的属性
### 2.4.1. PlatformToolset 全局属性
工具集,目前支持以下工具集:
| 工具集 | 说明
| ------------------ | -----------------
| YY_Cross_GCC_1_0 | GCC工具集,Linux系统默认的工具集,MacOS暂时对YY_Cross_GCC_1_0支持不好。
| YY_Cross_Clang_1_0 | CLang工具集,MacOS系统默认的工具集。
示例:
```xml
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration">
<PlatformToolset>YY_Cross_GCC_1_0</PlatformToolset>
</PropertyGroup>
```
### 2.4.2. Platform 全局属性
一般来说,Platform拥有以下几种可能:
| 目标系统 | 支持的 Platform
| -------- | ---------
| Linux | x86、x64、ARM、ARM64、MIPS
| MacOS | x86、x64、ARM64
> 注意:Platform是在调用msbuild时传入的,一般不应该直接设置到工程。
示例:
```
dotnet msbuild '/home/john/Desktop/ConsoleApplication2/ConsoleApplication2.vcxproj' '-p:Configuration=Release;Platform=x64'
```
> 特别提醒:特别是Linux系统。编译时,必须安装Platform对应的Triplet,否则将找不到g++而失败!比如对于一个x64的Ubuntu,使用GCC编译ARM64小端的Linux程序,则先安装 `g++-aarch64-linux-gun`,命令如下所示:
```
sudo apt-get install g++-aarch64-linux-gun
```
### 2.4.3. PlatformTriplet 全局属性
平台的Triplet值,比如说:i686-linux-gnu。一般无需设置,框架会根据Platform属性自动调整。
各个平台Platform的PlatformTriplet默认值如下表所示:
| Platform | Linux | MacOS |
| --------- | ---------------------------- | ---------------------------- |
| x86 | i686-linux-gnu | i686-apple-darwin
| x64 | x86_64-linux-gnu | x86_64-apple-darwin
| ARM | arm-linux-gnueabihf | 不支持
| ARM64 | aarch64-linux-gnu | aarch64-apple-darwin
| MIPS | mips-linux-gnu | 不支持
如果对默认的`PlatformTriplet`值不满意,可以考虑手工调整,示例:
```xml
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PlatformTriplet>x86_64-linux-gnu</PlatformTriplet>
</PropertyGroup>
```
### 2.4.4. Sysroot 全局属性
用于自定义库目录以及头文件位置。此路径会通过`--sysroot`传递给编译器以及链接器。示例:
```xml
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<Sysroot>urs/opt/mysysroot</Sysroot>
</PropertyGroup>
```
# 3. 支持的属性以及元素参数映射情况
## 3.1. ClCompile
它描述了C/C++代码编译参数配置情况。
### 3.1.1. CompileAs 属性(枚举)
选择源代码文件的编译语言选项。
| 选项 | Windows(MSVC) | Linux(GCC/CLang) | OSX(GCC/CLang) | 选项含义
| ----------------- | ----------------- | ----------------- | -------- | ------
| Default | | | | 使用默认语言(`.c` 文件编译为 C代码,`.m` 文件编译为Object-C代码,`.mm` 文件编译为Object-C++),其他统一编译为C++代码。
| CompileAsC | /TC | -x c | -x c | 编译为 C 代码。
| CompileAsCpp | /TP | -x c++ | -x c++ | 编译为 C++ 代码。
| CompileAsObjC | 不支持 | 不支持 | -x objective-c | 编译为 Object-C 代码。
| CompileAsObjCpp | 不支持 | 不支持 | -x objective-c++ | 编译为 Object-C++ 代码。
示例:
```xml
<ClCompile Include="C:\123.cpp">
<CompileAs>CompileAsC</CompileAs>
</ClCompile>
```
### 3.1.2. AdditionalIncludeDirectories 属性(字符串列表)
指定一个或多个要添加到包括路径的目录;如�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于MSBuild的C跨平台工具集,让Linux、MacOS.zip (246个子文件)
Samples\HelloWorld----C++\main.cpp 124B
YY.Build.Cross.Tasks\Cross\Compile.cs 67KB
Microsoft.Build.CppTasks.Common\Properties\Microsoft.Build.CPPTasks.Strings.Designer.cs 62KB
Microsoft.Build.Shared\FileMatcher.cs 61KB
Microsoft.Build.CPPTasks\VCToolTask.cs 44KB
YY.Build.Cross.Tasks\Cross\Ld.cs 41KB
Microsoft.Build.CPPTasks\TrackedVCToolTask.cs 39KB
Microsoft.Build.Utilities\CanonicalTrackedInputFiles.cs 35KB
Microsoft.Build.Utilities\CanonicalTrackedOutputFiles.cs 21KB
Microsoft.Build.CPPTasks\GetOutOfDateItems.cs 16KB
YY.Build.Cross.Tasks\Cross\Ar.cs 14KB
Microsoft.Build.Shared\ErrorUtilities.cs 13KB
Microsoft.Build.CPPTasks\ToolSwitch.cs 10KB
Microsoft.Build.Shared\FileUtilities.cs 8KB
Microsoft.Build.CPPTasks\CPPClean.cs 8KB
YY.Build.Cross.Tasks\OSX\Compile.cs 7KB
Microsoft.Build.Shared\EscapingUtilities.cs 6KB
Microsoft.Build.Utilities\DependencyTableCache.cs 5KB
Microsoft.Build.CppTasks.Common\VCMessage.cs 4KB
Microsoft.Build.Shared\ReuseableStringBuilder.cs 4KB
YY.Build.Cross.Tasks\OSX\Ld.cs 4KB
Microsoft.Build.Shared\FileTracker.cs 4KB
Microsoft.Build.Shared\FileUtilitiesRegex.cs 3KB
Microsoft.Build.CPPTasks\MsbuildTaskUtilities.cs 3KB
YY.Build.Cross.Tasks\Cross\GCCMapReader.cs 3KB
Microsoft.Build.Utilities\CanonicalTrackedFilesHelper.cs 3KB
Microsoft.Build.CppTasks.Common\SetEnv.cs 3KB
Microsoft.Build.Shared\FileSystem\ManagedFileSystem.cs 2KB
Microsoft.Build.Framework\NativeMethods.cs 2KB
Microsoft.Build.Utilities\TrackedDependencies.cs 2KB
Microsoft.Build.Shared\ExceptionHandling.cs 2KB
Microsoft.Build.CPPTasks\Helpers.cs 2KB
Microsoft.Build.Shared\FileSystem\FileSystems.cs 2KB
Microsoft.Build.Shared\StringBuilderCache.cs 1KB
Microsoft.Build.Utilities\DependencyTableCacheEntry.cs 1KB
Microsoft.Build.Framework\ImmutableFilesTimestampCache.cs 794B
Microsoft.Build.Shared\VCUtilities.cs 751B
Microsoft.Build.CPPTasks\PropertyRelation.cs 561B
Microsoft.Build.CPPTasks\ArgumentRelation.cs 436B
Microsoft.Build.Shared\MSBuildConstants.cs 239B
Microsoft.Build.Utilities\DependencyFilter.cs 179B
Microsoft.Build.CppTasks.Common\Microsoft.Build.CppTasks.Common.csproj 2KB
.git\config 319B
.git\description 73B
.git\HEAD 23B
.git\index 27KB
.git\info\exclude 240B
.git\logs\HEAD 207B
.git\logs\refs\heads\master 207B
.git\logs\refs\remotes\origin\HEAD 207B
.git\packed-refs 933B
.git\refs\heads\master 41B
.git\refs\remotes\origin\HEAD 32B
.gitattributes 3KB
.gitignore 6KB
.git\objects\pack\pack-42a0e784886b3a6b47064150ac48ce9bc4c034cd.idx 19KB
README.md 40KB
Samples\ReadMe.md 2KB
Microsoft.Build.CppTasks.Common\readme.md 352B
YY.Build.Cross.Tasks\readme.md 196B
Samples\HelloWorld----ObjectC++\main.mm 186B
.git\objects\pack\pack-42a0e784886b3a6b47064150ac48ce9bc4c034cd.pack 538KB
Build.proj 6KB
YY.Build.Cross.Tasks\YY.Build.Cross.Tasks.projitems 2KB
Microsoft.Build.Shared\Microsoft.Build.Shared.projitems 2KB
Microsoft.Build.CPPTasks\Microsoft.Build.CPPTasks.projitems 1KB
Microsoft.Build.Utilities\Microsoft.Build.Utilities.projitems 1KB
Microsoft.Build.Framework\Microsoft.Build.Framework.projitems 766B
VCTargets\v170\Microsoft.Cpp.Common.props 36KB
VCTargets\v170\Microsoft.Cpp.Default.props 23KB
VCTargets\v170\Microsoft.Cpp.WindowsSDK.props 21KB
VCTargets\v170\Microsoft.Cpp.VCTools.Content.props 18KB
VCTargets\v170\Application Type\Linux\1.0\Linux.WSL.props 16KB
VCTargets\v170\Application Type\OSX\1.0\Linux.WSL.props 16KB
VCTargets\v170\Application Type\OSX\1.0\Linux.props 16KB
VCTargets\v170\Application Type\Linux\1.0\Linux.props 16KB
YY.Build.Cross.Tasks\Targets\OSX\YY.OSX.Cross.props 14KB
YY.Build.Cross.Tasks\Targets\Linux\YY.Linux.Cross.props 14KB
VCTargets\v170\Microsoft.Cpp.AppContainerApplication.props 14KB
VCTargets\v170\Microsoft.Cl.Common.props 13KB
VCTargets\v170\Microsoft.Cpp.VCTools.props 9KB
VCTargets\v170\Application Type\Linux\1.0\Linux.Cross.Common.props 9KB
VCTargets\v170\Application Type\OSX\1.0\Linux.Cross.Common.props 9KB
VCTargets\v170\Microsoft.Cpp.props 9KB
VCTargets\v170\Microsoft.Cpp.ToolsetLocation.props 8KB
VCTargets\v170\Microsoft.Cpp.Redirect.11.props 8KB
VCTargets\v170\Microsoft.Link.Common.props 7KB
VCTargets\v170\Microsoft.Cpp.Redirect.15.props 7KB
VCTargets\v170\Microsoft.Cpp.Analysis.props 4KB
VCTargets\v170\Microsoft.Cpp.Clang.props 4KB
VCTargets\v170\Microsoft.CodeAnalysis.Extensions.props 3KB
VCTargets\v170\Microsoft.Cpp.MSVC.Toolset.Common.props 3KB
VCTargets\v170\Microsoft.Cpp.UnitTest.props 3KB
VCTargets\v170\Microsoft.Cpp.Redirect.16.props 3KB
YY.Build.Cross.Tasks\Targets\Linux\Platforms\YY_Cross_GCC_1_0\Toolset.props 3KB
YY.Build.Cross.Tasks\Targets\OSX\Platforms\YY_Cross_GCC_1_0\Toolset.props 3KB
YY.Build.Cross.Tasks\Targets\Linux\Platforms\YY_Cross_Clang_1_0\Toolset.props 3KB
YY.Build.Cross.Tasks\Targets\OSX\Platforms\YY_Cross_Clang_1_0\Toolset.props 3KB
VCTargets\v170\Microsoft.Cpp.Redirect.14.props 2KB
VCTargets\v170\Microsoft.Cpp.ManagedExtensionsNetCore.props 2KB
共 246 条
- 1
- 2
- 3
资源评论
学习开源项目成就精彩人生
- 粉丝: 1118
- 资源: 1697
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功