在 CMake 中包含 Visual Studio 解决方案
Include Visual Studio solution in CMake
我有一个分为两部分的大型项目:
第 1 部分需要跨平台,我们使用 CMake 为此设置所有项目文件。
第 2 部分仅适用于 windows。它在 .SLN 文件中配置,并且取决于第 1 部分。
我们使用cmake生成了一个Part1.sln,但是此时我们有两个不同的解决方案(Part1.sln和Part2.sln),不断地从一个切换到另一个很烦人其他.
显然,在第 2 部分中使用 CMake 不是一种选择,因为我们的大多数开发人员无法编辑 cmake 文件,并且希望直接从 MSVC 修改解决方案。
据我所知,不可能 "include" 一个 visual studio 解决方案在另一个解决方案中,但我可能错了。
我们想生成一个包含第 1 部分和第 2 部分的单个 .SLN 文件,可能使用 CMake 本身或其他一些方法。
你是对的,你不能在另一个文件中包含完整的 Visual Studio 解决方案文件。
但是,您感兴趣的第 1 部分项目中的大部分信息可能不在解决方案本身中,而是在各个 .vcxproj
项目文件中。这些可以包含在任意数量的解决方案中。
既然你说在Part 2项目中使用CMake是不可能的,那么这里不会得到完美的解决方案。有人需要在第 1 部分中执行 CMake 运行 以生成项目文件。不过,这可以通过第 2 部分项目中的自定义构建步骤来完成。第 2 部分解决方案文件将包含对该 CMake 运行.
生成的项目的硬编码引用
如果您在第 1 部分中更改了项目结构,则必须相应地调整第 2 部分的解决方案。如果第 1 部分中两个项目的项目间依赖关系发生变化,这将变得特别糟糕。此外,如果您在加载解决方案之前忘记 运行 第 1 部分中的 CMake,您最终会得到一堆 load failed
项目,但这不是什么大问题。只需 运行 CMake 并在相应项目上右键单击 -> 重新加载项目。
我们最终使用了 include_external_msproject
。最终解决方案包含一个混合了标准 cmake 文件 (add_subdirectory
) 和 vcproj 文件的主 cmake 文件。唯一(次要)的缺点是 Part2.sln 中的项目间依赖关系必须在顶层 CMakeLists.txt
.
中重新实现
我有一个分为两部分的大型项目:
第 1 部分需要跨平台,我们使用 CMake 为此设置所有项目文件。
第 2 部分仅适用于 windows。它在 .SLN 文件中配置,并且取决于第 1 部分。
我们使用cmake生成了一个Part1.sln,但是此时我们有两个不同的解决方案(Part1.sln和Part2.sln),不断地从一个切换到另一个很烦人其他.
显然,在第 2 部分中使用 CMake 不是一种选择,因为我们的大多数开发人员无法编辑 cmake 文件,并且希望直接从 MSVC 修改解决方案。
据我所知,不可能 "include" 一个 visual studio 解决方案在另一个解决方案中,但我可能错了。
我们想生成一个包含第 1 部分和第 2 部分的单个 .SLN 文件,可能使用 CMake 本身或其他一些方法。
你是对的,你不能在另一个文件中包含完整的 Visual Studio 解决方案文件。
但是,您感兴趣的第 1 部分项目中的大部分信息可能不在解决方案本身中,而是在各个 .vcxproj
项目文件中。这些可以包含在任意数量的解决方案中。
既然你说在Part 2项目中使用CMake是不可能的,那么这里不会得到完美的解决方案。有人需要在第 1 部分中执行 CMake 运行 以生成项目文件。不过,这可以通过第 2 部分项目中的自定义构建步骤来完成。第 2 部分解决方案文件将包含对该 CMake 运行.
生成的项目的硬编码引用如果您在第 1 部分中更改了项目结构,则必须相应地调整第 2 部分的解决方案。如果第 1 部分中两个项目的项目间依赖关系发生变化,这将变得特别糟糕。此外,如果您在加载解决方案之前忘记 运行 第 1 部分中的 CMake,您最终会得到一堆 load failed
项目,但这不是什么大问题。只需 运行 CMake 并在相应项目上右键单击 -> 重新加载项目。
我们最终使用了 include_external_msproject
。最终解决方案包含一个混合了标准 cmake 文件 (add_subdirectory
) 和 vcproj 文件的主 cmake 文件。唯一(次要)的缺点是 Part2.sln 中的项目间依赖关系必须在顶层 CMakeLists.txt
.