假设您有一些来自unix世界的源代码。这个源包含一些文件,这些文件将创建一个库和许多小的.c文件(比如大约20个),这些文件被编译成命令行工具,每个工具都有自己的main()
函数,它们将使用库。
在unixy系统上,您可以使用makefile轻松完成此操作,但对Windows / Visual Studio世界的最天真的转换涉及为每个工具创建一个单独的项目,虽然它有效,但是要设置和完成很多工作。在文件系统和项目/解决方案级别同步并且更难以导航。我已经考虑过使用不同的配置,其中除了一个.c文件之外的所有文件都被排除在构建之外,但这会使得构建所有工具变得不可能。
是否有一种很好的方法可以从单个“东西”(项目,msbuild文件等)构建所有工具?
我真的对使用cygwin的gcc / mingw或NAnt不感兴趣。我想尽可能地坚持使用标准的Windows工具链。
答案 0 :(得分:1)
你没有已使用visual studio来编译代码。您可以创建自己的批处理文件或Powershell脚本,只需在源代码上调用编译器,就像makefile一样。
答案 1 :(得分:1)
所以我现在已经研究了一段时间了,解决方案都有很多不足之处。
你可以......
手工制作大量小项目。
使用MSBuild并处理其陡峭的学习曲线。
使用与Visual Studio无法很好集成的构建工具,例如GNU make。
您甚至无法使用.NET项目制作项目模板!好吧,如果你想通过我想的那样跋涉文档,你可以创建一个向导。就个人而言,我决定采用“许多小项目”解决方案,并处理它。事实证明它可能不像我想象的那么可怕,尽管它仍然很糟糕。这是我在Visual Studio 2008中所做的:
创建您的第一个Win32命令行工具项目,为所有平台下载所有设置,并确保它在所有情况下都能正常运行。这将是您的“模板”,因此您不需要在制作了20份副本后对其进行编辑。
(可选)我在visual studio项目文件中设置我的路径,以便所有内容都在项目目录中构建,然后我有一个后期构建步骤复制我需要的dll / exe / pdb文件$(SolutionDir)$(OUTDIR)。这样,您可以跳转到一个目录来测试所有工具和/或将它们包装起来进行二进制分发。 VS2008看起来很疯狂并且丢失了输出文件夹,Win32和x64输出的默认位置不同。花几分钟确保所有平台保持一致将在以后获得回报。
清理模板。摆脱任何用户设置文件和编译器输出。
根据需要多次复制和粘贴项目。每个工具一个项目。
将每个复制的项目文件夹和项目文件重命名为新的工具名称。在Notepad ++等文本编辑器中打开项目文件。如果您有一个简单的单文件项目,则需要在文件开头的两个位置更改项目名称,并在文件末尾更改源代码文件名。您不需要触摸中间的配置内容。
您还需要更改项目的GUID。弹出打开guidgen.exe(在SDK bin目录中)并使用最后一个单选按钮设置。将新GUID复制并粘贴到顶部的每个项目文件中。如果您有依赖项,则源代码附近的文件底部会有一个或多个GUID。不要更改它们,因为它们是依赖项中的GUID并且必须匹配!
进入Visual Studio,打开主解决方案并添加工具项目。
进入配置管理器并确保所有支持的平台的一切正确,然后测试您的构建。
它并不漂亮,但它可以工作,并且非常值得设置时间能够从GUI控制您的构建。希望VS2010会更好,但我不是太希望。如今,MS似乎比C / C ++社区给.NET社区带来了更多的爱。
答案 2 :(得分:0)
如果你有一个makefile,你可以在Visual Studio中使用'makefile'项目(在名称错误 - 它只允许你指定自定义构建/调试命令),并使用它来调用GNU make。
您需要更改makefile以使用VC ++命令行工具而不是cc或gcc或其使用的任何内容,但这些工具通常由makefile顶部的宏指定。
如果makefile使用其他特定于Unix的命令(例如rm),则可能需要进行修改或创建bath文件以将命令映射到Windows等效命令。另一个选择是从GNUWin32安装任何必要的工具以使其正常工作。
如果构建非常复杂或涉及配置脚本,那么您将面临更艰巨的任务。您可以使用MSYS / MinGW从配置脚本生成makefile,然后按上述方法对其进行修改,使其与VC ++一起使用。
然而,Makefile项目不会在Visual Studio中紧密集成。所有的构建管理都归功于你和makefile。
答案 3 :(得分:-1)
如果您真的使用Visual Studio,我建议为每个工具创建一个项目,并将这些项目添加到单个解决方案中。从Visual Studio中,可以轻松地一次构建完整的解决方案,MSBuild也知道如何构建.sln文件。
msbuild myslnfile.sln
甚至:
msbuild
...将构建您的解决方案。