2012-04-09 71 views
0

我有一个复合项目,其中包含:用于Linux/Windows的C++库,基于Windows的C++库源的C++/CLI库,基于Windows的C++/CLI库的C#项目,基于Linux/Windows的C++库的C++项目。如何建立这样的项目?我需要选择哪种构建系统?构建“本地代码+包装+托管代码”项目

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

在我有两个MSVS解决方案之前:用于托管(可由cmake配置)和用于本地(由cmake生成)代码项目。管理项目在MSVS中编写。本地项目在CMakeLists.txt中写入。 CMake配置了使用Windows环境变量的托管项目,这些变量保留了到外部库,输出目录等的路径。当然这是一个糟糕的决定。

+0

你应该把它全部在VS.有没有比你想要的“VS”更多的东西? – mydogisbox 2012-04-09 18:11:43

+0

你的意思是我应该有原始的MSVS项目用于在Windows和CMakeLists中构建Linux?但在这种情况下,如果我想将源文件添加到本机库,我需要更改MSVS项目和CMakeLists。 – dizel3d 2012-04-09 18:29:30

+0

请参阅下面的答案。 – mydogisbox 2012-04-09 18:36:54

回答

0

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

+0

如何配置Vusial Studio项目?我的意思是你如何设置外部库的路径,输出目录? – dizel3d 2012-04-09 18:59:30

+0

对于C++?在VC++目录下的C++项目属性页面中,您可以设置库目录。 – mydogisbox 2012-04-09 19:09:07

+0

您只需要为解决方案外的应用程序设置库目录。里面的那些将他们编译的库放在默认路径的一部分中。对于C#引用您的CLI项目,只需将所需项目添加到其引用。 – mydogisbox 2012-04-09 19:28:02

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专业版或更高版本,那么你可以同时包含您的C#项目和你的C解决方案文件++/CLI项目,所以从Visual Studio中构建一切都相当简单。但是,如果您使用的是Visual Studio的Express版本,那么您可能需要使用MSBuild(或其他构建脚本工具),因为在同一解决方案中不能有与C++/CLI项目相同的解决方案一个使用Express版本的C#项目,因此您将需要一个MSBuild脚本,它可以一步完成所有各种项目的编译。

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

+0

MSBuild不在Linux下工作,但我需要在Linux和Windows中构建本机C++库。 – dizel3d 2012-04-09 18:39:38