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

使用CMake生成Visual Studio C++;项目文件 我正在研究一个开源的C++项目,用于在Linux和Windows上编译的代码。我使用CMake在Linux上构建代码。为了便于开发设置和政治原因,我必须坚持使用Windows上的Visual Studio项目文件/编辑器(例如,我不能切换到)。我看到了使用CMake生成VisualStudio文件的说明,如下所示,c++,visual-studio,build-process,cross-platform,cmake,C++,Visual Studio,Build Process,Cross Platform,Cmake,您以前是否使用CMake生成Visual Studio文件?你的经历怎么样?假设我想向我的项目中添加一个新文件。这方面的工作流程是什么?CMake实际上在这方面做得很好。关键是Windows端的每个人都必须记住在加载解决方案之前运行CMake,而Mac端的每个人都必须记住在make之前运行CMake 最困难的部分是作为一名Windows开发人员,确保您的结构更改在cmakelist.txt文件中,而不是在解决方案或项目文件中,因为这些更改可能会丢失,即使没有丢失,也不会转移到同样需要它们的Mac

您以前是否使用CMake生成Visual Studio文件?你的经历怎么样?假设我想向我的项目中添加一个新文件。这方面的工作流程是什么?

CMake实际上在这方面做得很好。关键是Windows端的每个人都必须记住在加载解决方案之前运行CMake,而Mac端的每个人都必须记住在make之前运行CMake

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


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

正如Alex所说,效果非常好。唯一棘手的部分是记住在cmake文件中进行任何更改,而不是在VisualStudio中进行更改。因此,在所有平台上,工作流程都类似于使用普通的旧makefiles


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

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

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

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

  • 创建文件,确保它位于正确的位置
  • 将文件添加到CMakeLists.txt
  • 建造
  • 如果任何CMakeLists.txt文件已更改(并且(半)自动重新加载解决方案/项目),CMake 2.6将自动重新运行


    请记住,如果您正在进行源代码外生成,则需要小心不要在生成目录中创建源文件(因为Visual Studio只知道生成目录)。

    CMake可以生成非常好的Visual Studio
    .projs
    /
    .sln
    ,但始终存在需要修改
    .cmake
    文件而不是
    .proj
    /
    .sln
    的问题。就目前情况而言,我们的处理方式如下:

  • 所有源文件都转到
    /src
    ,而在Visual Studio中可见的文件只是指向
    .filter
    中定义的源文件的“链接”
  • 程序员添加/删除要在定义的
    /src
    目录下工作的文件,而不是默认项目的目录
  • 完成后,他运行一个脚本“刷新”相应的
    .cmake
    文件
  • 他检查代码是否可以在重新创建的环境中生成
  • 他犯了罪
  • 起初,我们有点担心结果会如何,但工作流运行得非常好,在每次提交之前都可以看到良好的差异,每个人都可以很容易地看到自己的更改是否正确映射到
    .cmake
    文件中


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

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

    cmake -G "Visual Studio 10"
    

    该示例从输入的CMakeLists.txt文件生成所需的VS 2010文件,CMake无缝地生成Visual Studio项目和解决方案。您甚至可以为不同的Visual Studio版本生成项目/解决方案,而无需对CMake文件进行任何更改

    添加和删除源文件只需修改包含源文件列表的
    CMakeLists.txt
    ,并重新生成项目/解决方案。甚至还有一个globbing函数来查找目录中的所有源代码(不过使用时要小心)

    下面的链接很好地解释了CMake和VisualStudio特定的行为


    我已经开始了自己的项目,名为syncProj。此处的文档/下载链接:

    如果您计划使用VisualStudio进行开发,并且目前只支持C++。 与其他make系统相比,它的主要优点是您可以实际调试脚本,因为它是基于C#的

    如果您不熟悉syncProj,您可以将您的解决方案/项目转换为.cs脚本,并从那时起继续进一步开发


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

    这里有很多很好的答案,但它们可能会被这个答案所取代

    如果这是真的,那么它就不再是了。对CMakeLists.txt的任何更改都将导致生成系统的重新生成(visual studio的项目文件、makefiles等)。VisualStudio中的工作流有点烦人