使用CMake生成Visual Studio C++项目文件

问题描述:

我正在开发一个开源的C++项目,用于编译Linux和Windows的代码。我使用CMake在Linux上构建代码。为了便于开发设置和政治原因,我必须坚持在Windows上使用Visual Studio项目文件/编辑器(例如,我不能切换到Code::Blocks)。我看到使用CMake生成Visual Studio文件的说明,如here使用CMake生成Visual Studio C++项目文件

您以前使用CMake生成过Visual Studio文件吗?你的经历如何?假设我想将一个新文件添加到我的项目中。这是什么工作流程?

CMake其实对此很不错。关键的部分是Windows上的每个人都必须记住在加载解决方案之前运行CMake,并且我们Mac端的每个人都必须记得在制作之前运行它。

最难的部分是作为Windows开发人员确保您的结构更改位于cmakelist.txt文件中,而不是解决方案或项目文件中,因为这些更改可能会丢失,即使不会丢失也不会转移到Mac方面也需要他们,Mac的人也需要记住不要因为相同的原因修改make文件。

这只是需要一点思考和耐心,但一开始就会有错误。但是如果你在双方都使用continuous integration,那么这些将会很早就被淘汰,人们最终会养成这种习惯。

+9

所取代。如果这是真实的一次,它不是任何更长的时间。对CMakeLists.txt所做的任何更改都将导致构建系统的重新生成(visual studio,makefiles等项目文件)。 Visual Studio中的工作流程很烦人,因为Visual Studio在检测到事件已更改时不会重新生成项目文件,而是等待您执行构建,从而导致出现对话框,因为构建需要中止以重新构建 - 加载项目文件。 – Vitali 2011-08-20 07:16:14

+0

需要注意的是,您不必通过IDE运行Visual Studio编译器。您可以在命令行上运行它:`C:\ ...> MSBuild ALL_BUILD.vcxproj` – PfunnyGuy 2017-11-14 18:53:16

正如Alex所说,它工作得很好。唯一棘手的部分是记住在cmake文件中进行更改,而不是在Visual Studio中进行更改。因此,在所有平台上,如果您使用普通的旧makefile,工作流程类似。

但它的工作相当简单,而且我没有cmake生成无效文件或类似的东西的问题,所以我不会担心太多。

我们将我们部门的构建链移至CMake,自从其他部门使用我们的项目文件并习惯于将其导入到他们的解决方案中之后,我们就有了一些内部路标。我们也对CMake没有完全集成到Visual Studio项目/解决方案管理器有些抱怨,因此文件必须手动添加到CMakeLists.txt;这是人们习惯的工作流程中的重大突破。

但总的来说,这是一个非常平稳的过渡。我们非常高兴,因为我们不必处理项目文件了。

添加新文件添加到项目的具体工作流程是非常简单的:

  1. 创建文件,确保它在正确的位置。
  2. 将文件添加到CMakeLists.txt。
  3. 构建。

如果任何CMakeLists.txt文件发生变化(和(半)自动重新加载解决方案/项目),CMake 2.6会自动重新运行。请记住,如果您正在执行源代码构建,则需要小心不要在构建目录中创建源文件(因为Visual Studio只知道构建目录)。

的CMake可以产生非常好的Visual Studio中.projs/.slns,但总是与需要修改.cmake文件,而不是.proj/.sln问题。因为它是现在,我们正在处理,如下所示:

  1. 所有源文件去/src并在Visual Studio中可见的文件只是“链接”到他们.filter定义。
  2. 程序员添加/删除记住在定义的/src目录上工作的文件,而不是默认项目的目录。
  3. 完成后,他运行一个脚本,用于“刷新”各自的.cmake文件。
  4. 他检查代码是否可以在重新创建的环境中构建。
  5. 他提交了代码。

起初我们都有点害怕它会如何了结,但工作流程作品真的很好,与漂亮的差异可见每次提交之前,每个人都可以很容易地看到,如果他的变化在.cmake文件正确映射。

要了解的另一个重要内容是缺少CMake中“解决方案配置”的支持(afaik)。就目前而言,您必须生成两个包含项目/解决方案的目录 - 每个构建类型(调试,发布等)都有一个。没有直接支持更复杂的功能 - 换句话说:配置之间的切换不会给你你所期望的。

+3

从CMake 2.8.10开始,生成的解决方案具有4种惯用的构建配置,并且支持定义其他自定义配置。 – John 2014-01-29 17:46:29

不知道,如果它直接关系到这个问题,但我一直在寻找如何产生的cmake从项目我发现一个可以使用这样的事情*的.sln答案:

cmake -G "Visual Studio 10" 

该示例通过输入CMakeLists.txt文件生成所需的VS 2010文件

CMake无缝地生成Visual Studio项目和解决方案。您甚至可以为不同的Visual Studio版本生成项目/解决方案,而无需对CMake文件进行任何更改。

添加和删除源文件只是修改CMakeLists.txt,它具有源文件列表并重新生成项目/解决方案。甚至有一个globbing功能来查找目录中的所有源(尽管它应该谨慎使用)。

以下链接非常好地解释了CMake和Visual Studio的特定行为。

CMake and Visual Studio

我已经开始自己的项目,叫做syncProj。从这里文档/下载链接:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

如果你打算使用Visual Studio进行开发,目前只支持C++。

与其他make系统相比,主要优势在于您可以实际调试脚本,因为它基于C#。

如果您对syncProj不熟悉,则可以将解决方案/项目转换为.cs脚本,并从该点开始继续进一步开发。

在cmake中,您需要从头开始编写所有内容。

这里很多伟大的答案,但他们可能会被此CMake support in Visual Studio (Oct 5 2016)