C++ 使用VisualStudio进行IDE,但使用CMake进行跨平台配置

C++ 使用VisualStudio进行IDE,但使用CMake进行跨平台配置,c++,visual-studio,cmake,C++,Visual Studio,Cmake,我已经发现了很多与我将要问的问题类似的问题,但它们似乎无法帮助我理解如何做我想做的事情,假设这是可行的 我喜欢VisualStudio,我想把它作为C++项目的开发环境,但我也想在我的双引导Linux系统上构建我自己的任何项目。我还希望能够将标题和源文件组织到共享驱动器上的特定目录结构中。我想使用CMake配置一个项目,以便在Linux上使用Make或在Windows上使用Visual Studio构建它 那么,是否有可能在Visual Studio 2012 Pro中维护一个项目,以利用其In

我已经发现了很多与我将要问的问题类似的问题,但它们似乎无法帮助我理解如何做我想做的事情,假设这是可行的

我喜欢VisualStudio,我想把它作为C++项目的开发环境,但我也想在我的双引导Linux系统上构建我自己的任何项目。我还希望能够将标题和源文件组织到共享驱动器上的特定目录结构中。我想使用CMake配置一个项目,以便在Linux上使用Make或在Windows上使用Visual Studio构建它

那么,是否有可能在Visual Studio 2012 Pro中维护一个项目,以利用其IntelliSense和编译功能,快速编写代码并对其进行测试,然后在不同的目录中轻松地将源文件作为CMake配置的一部分(我想无论发生什么情况,我仍然必须维护我的CMake.txt文件)

我可以在每次添加或修改代码时将源代码从项目目录复制到CMake files文件夹,然后更新CMake.txt文件,但这似乎很耗时

我知道有一个转换器可以将解决方案转换为CMake文件。这是我最好的选择吗?如果是这样的话,效果如何?

我对你的问题的最佳答案是: 虽然我不能推荐这个工具,因为我没有使用过它,但它似乎是最接近您所寻找的工具

它需要在您的计算机上安装运行时,但它将根据您的VisualStudio项目生成文件

我对此过于谨慎,因为在转换过程中可能会丢失一些微妙的CMake细微差别,但它有一些有利的评论,肯定会使过程更容易,即使在签入之前涉及一些手动步骤(以验证CMake脚本是否正确)

也许您可以将其与单元测试集成,以验证CMake脚本的完整性?你可以随时为你发现的问题提供补丁

一个潜在的替代方案: 我在推断一些事情,所以如果我做出任何假设,请原谅我

如果您的目标是跨平台,而CMake并不是一项技术要求(只是达到这一目的的一种手段),但您不想采用推荐的CMake工作流,因为它不太直观(我完全理解),那么您可以看看,哪一种是较新的,但仍然是一个相当强大的项目生成工具:

我发现语法(pure)更容易理解,而且它的项目模型更接近visualstudio解决方案。这可能是一个更自然的工作流程

而且它是开源的,我发现它实际上非常容易添加扩展(自从我上次使用它已经一年了,我不知道现在它的状态如何)。也许您也可以构建一个反向生成器,因为该库附带了一个VisualStudio项目解析器,并且您可以通过一点创造力在两个方向上生成它

一年前我选择不采用它,因为当时它很难生成相互依赖的Xcode项目(可能是固定的!)。不过,我对Makefiles或VisualStudio解决方案没有任何问题

最后建议 我不建议从VisualStudio项目反向生成项目生成脚本的原因很简单,因为它会对您的项目产生非常棘手的依赖关系。Visual Studio项目不是标准化的,甚至是开放的——如果Microsoft更改格式,您可能会中断您的工作流,直到您或其他人为反向生成器创建修补程序以使您重新工作

您可能会争辩说,项目生成也有同样的问题,但VisualStudio在历史上一直是向后兼容的,或者至少与执行项目更新的工具一起提供。在旧版本中生成项目最有可能始终有效,而尝试解析VisualStudio解决方案的新版本更容易出错和破坏


如果这是一个严肃的生产项目,您希望在未来的许多年中继续使用和维护它,我强烈建议采用一个经过验证的工作流(直接在CMake或Premake文件中工作),即使它对开发人员来说一开始不太理想或不舒服。如果这将是一个长期项目,那么您熟悉新工作流所需的时间将与继续跨多个平台和不同团队维护临时构建系统所需的时间相形见绌。另外,作为一名开发人员,它将为您的腰带添加另一个工具。就我的两分钱。

考虑到我最近的经验,当我设法使用CMake生成一个或Visual Studio解决方案文件时,我不建议您自动将解决方案转换为CMake文件。VisualStudio项目文件包含过多的信息和参数,这些信息和参数通常不需要,CMake不直接支持(用不同的结构表示的功能),或者不支持

此外,解决方案对所有源代码和项目文件的布局可能非常奇怪,对于其他平台来说并不方便

我估计清理生成的文件要比从头开始编写一个干净的CMake文件花费更多的时间。这也是一种更合理的方式,因为您可以完全控制项目结构

在本例中,我使用以下CMake命令生成Visual Studio解决方案:

cmake -G "Visual Studio 10" -D DEBUG=0 .
对于Windows上的命令行批量生成和安装,我执行以下操作:

cmake --build . --target install --config VC_CONFIGURATION_1  -- "/v:m"
cmake --build . --target install --config VC_CONFIGURATION_2  -- "/v:m"
CMake文件本身是跨平台的。当然,它有几个特定于Windows的行来定义配置,还有add_executable()中的WIN32选项,但您只能在这个平台上设置它们。