在 CMake 中包含 Visual Studio 解决方案

sba*_*bbi 5 c++ cmake visual-studio-2008 visual-studio

我有一个大项目,它分为两部分:

  • 第 1 部分需要跨平台,我们使用 CMake 为此设置所有项目文件。

  • 第 2 部分仅适用于 Windows。它在 .SLN 文件中配置,它取决于第 1 部分。

我们使用cmake生成了一个Part1.sln,但是此时我们有两种不同的解决方案(Part1.sln和Part2.sln),不断地从一个切换到另一个很烦人。

显然,在第 2 部分中使用 CMake 不是一种选择,因为我们的大多数开发人员无法编辑 cmake 文件,并且希望直接从 MSVC 修改解决方案。

据我所知,不可能在另一个解决方案中“包含”一个视觉工作室解决方案,但我可能错了。

我们想生成一个包含第 1 部分和第 2 部分的单个 .SLN 文件,可能使用 CMake 本身或其他一些方法。

sba*_*bbi 5

我们最终使用了include_external_msproject. 最终解决方案由一个混合了标准 cmake 文件 ( add_subdirectory) 和 vcproj 文件的主 cmake 文件组成。唯一(次要)的缺点是 Part2.sln 中的项目间依赖关系必须在顶层重新实现CMakeLists.txt


Com*_*sMS 2

您是对的,您不能将完整的 Visual Studio 解决方案文件包含在另一个解决方案文件中。

但是,您感兴趣的第 1 部分项目中的大部分信息可能不在解决方案本身中,而是在各个.vcxproj项目文件中。这些可以包含在您想要的任意多个解决方案中。

既然你说在第 2 部分项目上使用 CMake 是不可能的,那么你在这里不会得到完美的解决方案。有人需要在第 1 部分上运行 CMake 来生成项目文件。不过,这可以通过第 2 部分项目中的自定义构建步骤来完成。然后,第 2 部分解决方案文件将包含对该 CMake 运行生成的项目的硬编码引用。

如果您更改第 1 部分中的项目结构,则必须相应地调整第 2 部分的解决方案。如果第 1 部分中两个项目的项目间依赖关系发生变化,情况会变得特别糟糕。另外,如果您在加载解决方案之前忘记在第 1 部分上运行 CMake,您最终会得到一堆load failed项目,但这并不是什么大问题。只需运行 CMake 并在相应项目上右键单击 -> 重新加载项目即可。