我正在开发一个开源C++项目,用于在Linux和Windows上编译的代码.我使用CMake在Linux上构建代码.为了便于开发设置和政治原因,我必须坚持使用Windows上的Visual Studio项目文件/编辑器(例如,我无法切换到Code :: Blocks).我看到了使用CMake生成Visual Studio文件的说明,如此处所示.
您之前是否使用过CMake生成Visual Studio文件?你的经历怎么样?假设我想在项目中添加一个新文件.这是什么工作流程?
CMake实际上非常适合这个.关键部分是Windows方面的每个人都必须记住在加载解决方案之前运行CMake,而我们Mac上的每个人都必须记住在make之前运行它.
最难的部分是作为Windows开发人员,确保您的结构更改位于cmakelist.txt文件中而不是解决方案或项目文件中,因为这些更改可能会丢失,即使没有丢失也不会转移到Mac端谁也需要它们,Mac的人需要记住不要因为同样的原因修改make文件.
它只需要一点思考和耐心,但一开始会有错误.但是如果你在双方都使用持续集成,那么这些将会很早就被淘汰出局,人们最终会养成这种习惯.
不确定它是否与问题直接相关,但我正在寻找如何从cmake项目生成*.sln的答案我发现可以使用这样的东西:
cmake -G "Visual Studio 10"
该示例从输入的CMakeLists.txt文件生成所需的VS 2010文件
我们将我们部门的构建链移动到了CMake,自从其他部门使用我们的项目文件以及习惯于将它们导入到他们的解决方案中之后,我们就有了一些内部路障.我们还抱怨CMake没有完全集成到Visual Studio项目/解决方案管理器中,因此必须手动将文件添加到CMakeLists.txt; 这是人们习惯的工作流程中的重大突破.
但总的来说,这是一个非常平稳的过渡.我们非常高兴,因为我们不再需要处理项目文件.
将新文件添加到项目的具体工作流程非常简单:
创建文件,确保它在正确的位置.
将文件添加到CMakeLists.txt.
建立.
如果任何CMakeLists.txt文件已更改(并且(半)自动重新加载解决方案/项目),CMake 2.6会自动重新运行.
请记住,如果您正在进行源外构建,则需要注意不要在构建目录中创建源文件(因为Visual Studio只知道构建目录).
正如亚历克斯所说,它运作良好.唯一棘手的部分是记住在cmake文件中进行任何更改,而不是在Visual Studio中进行.因此,在所有平台上,工作流程与您使用普通旧的makefile类似.
但是它很容易使用,我对cmake生成无效文件或类似的东西没有任何问题,所以我不会太担心.
CMake无缝地生成Visual Studio项目和解决方案。您甚至可以为不同的Visual Studio版本生成项目/解决方案,而无需对CMake文件进行任何更改。
添加和删除源文件只需要修改CMakeLists.txt
具有源文件列表的文件并重新生成项目/解决方案即可。甚至还有一个遍历功能,可以在目录中查找所有源(尽管应谨慎使用)。
以下链接很好地说明了CMake和Visual Studio特定的行为。
CMake和Visual Studio
CMake可以生成非常好的Visual Studio .projs
/ .slns
,但是总是存在需要修改.cmake
文件而不是.proj
/的问题.sln
.就像现在一样,我们正在处理如下:
所有源文件都转到/src
,Visual Studio中可见的文件只是在其中定义的"链接" .filter
.
程序员添加/删除记住在定义的/src
目录上工作的文件,而不是默认项目的文件.
当他完成后,他运行一个"刷新"相应.cmake
文件的脚本.
他检查代码是否可以在重新创建的环境中构建.
他提交了代码.
起初我们有点担心它会如何发展,但是工作流程工作得很好,并且在每次提交之前可以看到很好的差异,每个人都可以很容易地看到他的更改是否在.cmake
文件中正确映射.
另一个需要了解的重要事项是CMake中"解决方案配置" 缺乏支持(afaik).就目前而言,您必须使用项目/解决方案生成两个目录 - 每个构建类型一个(调试,发布等).没有直接支持更复杂的功能 - 换句话说:在配置之间切换不会给你你所期望的.