gpt4 book ai didi

c++ - IDE 使用 Visual Studio,但跨平台配置使用 CMake

转载 作者:IT老高 更新时间:2023-10-28 23:20:38 29 4
gpt4 key购买 nike

我发现了很多与我要问的问题类似的问题,但它们似乎并没有完全帮助我理解如何做我想做的事情,假设它甚至是可行的。

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

那么是否可以在 Visual Studio 2012 Pro 中维护一个项目以利用其 IntelliSense 和编译以便快速编写代码和测试它,然后轻松地将源文件作为 CMake 配置的一部分以不同的方式目录(我想无论如何我仍然需要维护我的 CMake .txt 文件)?

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

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

最佳答案

我对您问题的最佳回答:

虽然我不能推荐这个工具,因为我没有使用过它,但它似乎是最接近你所寻找的。

http://sourceforge.net/projects/vcproj2cmake/

它需要一个 Ruby运行时要安装在您的机器上,但它会生成 CMakeLists.txt基于您的 Visual Studio 项目的文件。

我会谨慎对待这一点,因为在转换过程中可能会丢失一些细微的 CMake 细微差别,但它有一些好评,并且肯定会使过程更容易,即使涉及一些手动步骤在 checkin 之前(验证 CMake 脚本是否正确)。

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

一个潜在的替代方案:

我在推断一些事情,如果我做出任何假设,请原谅我。

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

我发现语法(纯 Lua)更容易理解,并且它的项目建模更接近于 Visual Studio 解决方案。这对您来说可能是更自然的工作流程。

它也是开源的,我发现添加扩展实际上非常容易(我上次使用它已经一年了,我不确定它现在的状态)。也许您也可以构建一个反向生成器,因为该库带有一个完整的 Visual Studio 项目解析器,并且您可以让它在两个方向上生成。

一年前我选择不采用它,因为当时它很难生成相互依赖的 Xcode 项目(也许它已经修复了!)。不过,我对 Makefile 或 Visual Studio 解决方案没有任何问题。

最后的建议

我不建议从 Visual Studio 项目反向生成项目生成脚本的原因仅仅是它对您的项目产生了非常尴尬的依赖。 Visual Studio 项目不是标准化的,甚至是开放的——如果 Microsoft 更改格式,您可能会破坏您的工作流程,直到您或其他人为您的反向生成器创建补丁以让您再次工作。

您可能会争辩说,项目生成存在相同的问题,但 Visual Studio 历来都是向后兼容的 - 或者至少提供了执行项目更新的工具。在旧版本中生成项目很可能总是有效,而尝试解析 Visual Studio 解决方案的新版本则更容易出错和损坏。

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

关于c++ - IDE 使用 Visual Studio,但跨平台配置使用 CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995877/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com