106

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

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

4

7 回答 7

64

CMake 实际上对此非常有用。关键部分是 Windows 端的每个人都必须记住在加载解决方案之前运行 CMake,而我们 Mac 端的每个人都必须记住在 make 之前运行它。

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

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

于 2008-12-27T18:01:53.737 回答
55

不确定它是否与问题直接相关,但我一直在寻找如何从 cmake 项目生成 *.sln 的答案,我发现可以使用这样的东西:

cmake -G "Visual Studio 10"

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

于 2012-02-13T11:39:43.123 回答
27

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

但总的来说,这是一个相当平稳的过渡。我们很高兴,因为我们不再需要处理项目文件。

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

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

如果任何 CMakeLists.txt 文件发生更改,CMake 2.6 会自动重新运行(并且(半)自动重新加载解决方案/项目)。

请记住,如果您正在执行源外构建,则需要注意不要在构建目录中创建源文件(因为 Visual Studio 只知道构建目录)。

于 2008-12-28T19:03:22.190 回答
13

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

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

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

CMake 和 Visual Studio

于 2014-01-18T07:41:31.143 回答
10

正如亚历克斯所说,它运作良好。唯一棘手的部分是记住在 cmake 文件中进行任何更改,而不是在 Visual Studio 中进行更改。因此,在所有平台上,工作流程都类似于您使用普通的旧 makefile。

但它很容易使用,而且我对 cmake 生成无效文件或类似的东西没有任何问题,所以我不会太担心。

于 2008-12-27T21:26:02.530 回答
6

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

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

起初我们有点害怕结果如何,但工作流程运行得非常好,每次提交前都有很好的差异可见,每个人都可以很容易地看到他的更改是否正确映射到.cmake文件中。

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

于 2011-03-22T21:22:04.093 回答
2

这里有很多很好的答案,但它们可能会被Visual Studio 中的 CMake 支持所取代(2016 年 10 月 5 日)

于 2017-06-24T21:31:55.817 回答