0

我有一个复合项目,其中包含:适用于 Linux/Windows 的 C++ 库、基于适用于 Windows 的 C++ 库源的 C++/CLI 库、基于适用于 Windows 的 C++/CLI 库的 C# 项目、基于适用于 Linux/Windows 的 C++ 库的 C++ 项目。如何建设这样的项目?我需要选择什么构建系统?

现在我使用在 Linux 中生成 makefile 的 CMake 和在 Windows 中生成 MSVS 解决方案,但是编写 CMakeLists.txt 来构建 C# 项目非常困难。

在我有两个 MSVS 解决方案之前:用于托管(由 cmake 配置)和用于本机(由 cmake 生成)代码项目。托管项目是用 MSVS 编写的。原生项目写在 CMakeLists.txt 中。CMake 正在配置使用 Windows 环境变量的托管项目,这些变量保持到外部库、输出目录等的路径。这肯定是一个错误的决定。

4

2 回答 2

0

MSBuild 是一个不错的构建脚本工具,可以很好地与 Visual Studio 项目文件(本质上是 MSBuild 脚本本身)集成。如果您以前从未使用过它,可能会有一些学习曲线,但除此之外,使用它来构建 .NET 项目非常简单。

使用 MSBuild 脚本构建 Visual Studio 项目的示例:

<!-- Compile a C# project and output to a staging directory -->
<MSBuild Projects="MyCsProject\MyCsProject.csproj" Properties="outDir=Staging\bin\MyCsProject" />

<!-- Compile a C++/CLI project and output to a staging directory, then re-sign it -->
<MSBuild Projects="MyCppProject\MyCppProject.vcxproj" Properties="outDir=Staging\bin\MyCppProject" />
<Exec Command="&quot;$(WindowsSDKDirectory)\Bin\sn.exe&quot; -Rc Staging\bin\MyCppProject\MyCppProject.dll $(StrongNameKeyContainer)" />

如果您使用的是 Visual Studio Professional 或更高版本,那么您可以拥有一个包含 C# 项目和 C++/CLI 项目的解决方案文件,因此在 Visual Studio 中构建所有内容相当容易。

但是,如果您使用的是 Visual Studio 的 Express 版本,那么您可能需要使用 MSBuild(或其他构建脚本工具),因为您不能在与 C# 项目相同的解决方案中使用 C++/CLI 项目Express 版本,因此您将需要一个 MSBuild 脚本,它可以一步编译所有各种项目。

我在 C++/CLI 项目中遇到的一个问题是签名。如果您需要签署您的 C++/CLI 程序集,那么您需要在您的 MSBuild 脚本中添加一个步骤以使用“sn”工具(应该是 Windows SDK 的一部分)在之后重新签署您的 C++/CLI 程序集它已被编译。如果您使用的是 .snk.pfx 文件,那么您需要使用“sn”工具首先将该密钥添加到密钥容器(使用 -i 开关),然后您需要使用该密钥容器当您重新签署程序集时(使用 -Rc 开关)。

于 2012-04-09T18:26:33.427 回答
0

我目前在一个具有 C++、CLI 和 C# 的项目中工作,并且 C++ 也用于 iOS 应用程序。我们在 Windows 上设置它的方式是我们将每种语言都放在自己的项目中,然后将所有项目放在一个解决方案中,这样我们就可以通过 IDE 一步编译所有内容。所有依赖项等都由 VS 管理。我认为让 VS 设置所有依赖项的简单性远远超过了为 C++ 文件创建项目的额外工作。对于 iOS,我有一个单独的 Xcode 项目,它为 iOS 构建所有 C++ 东西,同样你会有一个用于 Windows 的 CMake 项目。

于 2012-04-09T18:36:42.373 回答