我正在开发一个开源C ++项目,用于在Linux和Windows上编译的代码。我使用CMake在Linux上构建代码。为了便于开发设置和政治原因,我必须坚持使用Windows上的Visual Studio项目文件/编辑器(例如,我无法切换到Code::Blocks)。我看到使用CMake生成Visual Studio文件的说明,如here。
您之前是否使用过CMake生成Visual Studio文件?你的经历怎么样?假设我想在项目中添加一个新文件。这是什么工作流程?
答案 0 :(得分:54)
CMake实际上非常有用。关键部分是Windows方面的每个人都必须记住在加载解决方案之前运行CMake,而我们Mac上的每个人都必须记住在make之前运行它。
最困难的部分是作为Windows开发人员,确保您的结构更改位于cmakelist.txt文件中而不是解决方案或项目文件中,因为这些更改可能会丢失,即使没有丢失也不会转移到Mac方面也需要它们,Mac的人需要记住不要因为同样的原因修改make文件。
这需要一点思考和耐心,但一开始会有错误。但如果你在双方都使用continuous integration那么这些就会早早被淘汰出局,人们最终会养成这种习惯。
答案 1 :(得分:42)
不确定它是否与问题直接相关,但我正在寻找如何从cmake项目生成* .sln的答案我发现可以使用这样的东西:
cmake -G "Visual Studio 10"
该示例从输入CMakeLists.txt文件生成所需的VS 2010文件
答案 2 :(得分:25)
我们将部门的构建链移动到CMake,自从其他部门使用我们的项目文件以及习惯于将它们导入到他们的解决方案中之后,我们就有了一些内部道路暴徒。我们还抱怨CMake没有完全集成到Visual Studio项目/解决方案管理器中,因此必须手动将文件添加到CMakeLists.txt;这是人们习惯的工作流程中的重大突破。
但总的来说,这是一个非常平稳的过渡。我们非常高兴,因为我们不再需要处理项目文件了。
将新文件添加到项目的具体工作流程非常简单:
如果任何CMakeLists.txt文件发生变化(并且(半)自动重新加载解决方案/项目),CMake 2.6会自动重新运行。
请记住,如果您正在进行源外构建,则需要注意不要在构建目录中创建源文件(因为Visual Studio只知道构建目录)。
答案 3 :(得分:9)
正如亚历克斯所说,它运作良好。唯一棘手的部分是记住在cmake文件中进行任何更改,而不是在Visual Studio中进行。因此,在所有平台上,工作流程与您使用普通旧的makefile类似。
但它很容易使用,而且我对cmake生成无效文件或类似内容没有任何问题,所以我不会太担心。
答案 4 :(得分:5)
CMake可以生成非常好的Visual Studio .projs
/ .slns
,但是需要修改.cmake
文件而不是.proj
/ {{ 1}}。就像现在一样,我们按照以下方式处理它:
.sln
,Visual Studio中可见的文件只是/src
中定义的“链接”。.filter
目录上工作的文件,而不是默认项目的文件。/src
文件的脚本。起初我们有点害怕它会如何发展,但是工作流程工作得非常好,并且在每次提交之前可以看到很好的差异,每个人都可以轻松地看到他的更改是否在.cmake
文件中正确映射。
要了解的另一个重要事项是CMake中“解决方案配置”缺乏支持( afaik )。就目前而言,您必须使用项目/解决方案生成两个目录 - 每个构建类型一个(调试,发布等)。没有直接支持更复杂的功能 - 换句话说:在配置之间切换不会给你你所期望的。
答案 5 :(得分:5)
CMake无缝地生成Visual Studio项目和解决方案。您甚至可以为不同的Visual Studio版本生成项目/解决方案,而无需对CMake文件进行任何更改。
添加和删除源文件只需修改具有源文件列表并重新生成项目/解决方案的CMakeLists.txt
。甚至还有一个globbing函数来查找目录中的所有源代码(尽管应该谨慎使用)。
以下链接很好地解释了CMake和Visual Studio的特定行为。
答案 6 :(得分:0)
我已经开始了自己的项目,名为syncProj。文档/下载链接:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
如果您计划使用Visual Studio进行开发,目前只支持C ++。
与其他make系统相比的主要优点是您可以实际调试脚本,因为它是基于C#的。
如果您不熟悉syncProj,可以将解决方案/项目转换为.cs脚本,并从那时起继续进一步开发。
在cmake中,您需要从头开始编写所有内容。
答案 7 :(得分:0)
这里有很多很棒的答案,但它们可能会被CMake support in Visual Studio (Oct 5 2016)
取代