在CMake中包含Visual Studio解决方案

时间:2016-02-05 10:18:59

标签: c++ visual-studio visual-studio-2008 cmake

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

但是,您感兴趣的第1部分项目中的大部分信息可能不在解决方案本身中,而是在单个SELECT department, SUM(salary) "Money", CASE WHEN job_id = 'SA_MAN' THEN 'Y' END "Indicator" FROM (SELECT first_name || ' ' || last_name AS "name", salary, job_id, department_id depatment FROM employees) GROUP BY depatment, CASE WHEN job_id = 'SA_MAN' THEN 'Y' END ORDER BY 1 ; 项目文件中。这些可以包含在你想要的任意数量的解决方案中。

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

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

答案 1 :(得分:1)

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