我正在开发一个开源C ++项目,用于在Linux和Windows上编译的代码。我使用CMake在Linux上构建代码。为了简化开发设置和政治原因,我必须坚持Windows上的Visual Studio项目文件/编辑器(例如,我不能切换到Code :: Blocks)。我看到了使用CMake生成Visual Studio文件的说明,如此处所示。
您以前使用过CMake生成Visual Studio文件吗?您的经历如何?假设我要向项目添加一个新文件。这是什么工作流程?
我正在开发一个开源C ++项目,用于在Linux和Windows上编译的代码。我使用CMake在Linux上构建代码。为了简化开发设置和政治原因,我必须坚持Windows上的Visual Studio项目文件/编辑器(例如,我不能切换到Code :: Blocks)。我看到了使用CMake生成Visual Studio文件的说明,如此处所示。
您以前使用过CMake生成Visual Studio文件吗?您的经历如何?假设我要向项目添加一个新文件。这是什么工作流程?
Answers:
CMake实际上对此非常好。关键部分是Windows端的每个人都必须记住在加载解决方案之前运行CMake,而Mac端的每个人都必须在运行make之前记得运行它。
作为Windows开发人员,最困难的部分是确保您的结构更改在cmakelist.txt文件中,而不在解决方案或项目文件中,因为这些更改可能会丢失,即使没有丢失也不会转移到Mac端。也需要它们,而Mac员工则需要记住不要出于相同的原因而修改make文件。
只是需要一点思考和耐心,但是起初会有错误。但是,如果双方都在使用持续集成,那么这些将尽早消除,最终人们会养成这种习惯。
C:\...> MSBuild ALL_BUILD.vcxproj
cmake --build .
。
cmake --build . --config Debug -- /nologo /verbosity:minimal /m
。我将在之后插入.
target run_tests
以运行googletest单元测试,然后将“调试”替换为“发布”。(为Debug添加config选项是可选的,因为它是默认选项,但我将其包括在内以说明如何与“ Release”互换)
不知道它是否与问题直接相关,但是我一直在寻找有关如何从cmake项目中生成* .sln的答案,我发现一个人可以使用如下代码:
cmake -G "Visual Studio 10"
该示例从输入CMakeLists.txt文件生成所需的VS 2010文件
cmake
。
我们将部门的构建链移至CMake,与其他部门相比,我们内部存在一些障碍,因为其他部门使用我们的项目文件,并且习惯于将其导入到解决方案中。我们还有些抱怨CMake没有完全集成到Visual Studio项目/解决方案管理器中,因此必须将文件手动添加到CMakeLists.txt中。这是人们习惯的工作流程中的一个重大突破。
但总的来说,这是一个相当平稳的过渡。我们非常高兴,因为我们不再需要处理项目文件。
将新文件添加到项目的具体工作流程非常简单:
如果任何CMakeLists.txt文件已更改(并且(半)自动重新加载解决方案/项目),则CMake 2.6自动自动重新运行。
请记住,如果您要进行源代码外的构建,则需要注意不要在构建目录中创建源文件(因为Visual Studio仅知道构建目录)。
CMake无缝生成Visual Studio项目和解决方案。您甚至可以为不同的Visual Studio版本生成项目/解决方案,而无需对CMake文件进行任何更改。
添加和删除源文件只需要修改CMakeLists.txt
具有源文件列表的文件并重新生成项目/解决方案即可。甚至还有一个遍历功能来查找目录中的所有源(尽管应谨慎使用)。
以下链接很好地说明了CMake和Visual Studio特定的行为。
CMake可以生成非常好的Visual Studio .projs
/ .slns
,但是始终存在需要修改.cmake
文件而不是.proj
/的问题.sln
。现在,我们正在处理以下问题:
/src
而在Visual Studio中可见的文件只是它们在中定义的“链接” .filter
。/src
目录文件,而不是默认项目的文件。.cmake
文件。最初,我们有点担心结果如何,但是工作流确实运行良好,并且在每次提交之前都可以看到很好的差异,每个人都可以轻松查看自己的更改是否正确映射到 .cmake
文件中。
要了解的另一件事是缺少对CMake中“解决方案配置” 的支持(afaik)。就目前而言,您必须生成两个包含项目/解决方案的目录-每种构建类型(调试,发行版等)一个目录。没有直接支持更复杂的功能-换句话说:在配置之间切换不会给您您所期望的。
这里有很多很棒的答案,但可能会被Visual Studio中的CMake支持所取代(2016年10月5日)
我已经启动了自己的项目,名为syncProj。文档/下载链接从这里:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
如果您打算使用Visual Studio进行开发,并且目前仅支持C ++。
与其他make系统相比,主要优点是您可以实际调试脚本,因为它基于C#。
如果您不熟悉syncProj,则可以将解决方案/项目转换为.cs脚本,并从那时起继续进行进一步的开发。
在cmake中,您将需要从头开始编写所有内容。