如何在一个项目中同时支持vcxproj和cmake?

55

我正在开发一个跨平台的C++项目。最初的想法是使用msvc2010工作,并在CMake和Hudson的帮助下编译其他系统。 手动更改CMake文件似乎不太方便,因此有没有更简单的方法:编写vcxproj和vcxproj.filters的解析器,或者还有其他好的解决方案?

3个回答

60

有时候进行这种转换可能是有用的,例如为了进行移植。在我的旅行中,我发现以下内容没有特定的顺序:

专门针对 VS 到 CMake/GYP 的工具:

  • vcproj2cmake
  • vcxproj2cmake(不是拼写错误!)
  • gypify.py 是一个 .sln/解决方案文件读取的Gyp 文件生成器。Gyp 是一个 CMake 的替代品,目前正在被 Chromium 项目使用(Google Chrome 浏览器的基础)。Gyp 将输出 Makefile、Visual Studio 或 XCode 构建文件(请参见 Gyp 的“-f [make|scons|msvc|xcode]”开关)。这个 Python 脚本非常有前途,我希望很快能够修改它以正确指定包含头文件的文件夹,以供 gcc 的“-I”包含参数使用。

其他与 CMake/Make 相关的转换工具:

  • 'pbtomake'声称可以将XCode xcodeproj/pbproj文件转换为Makefiles(可能已过时)
  • 干杯

    Rich


    gypify 对我没用...它创建了一个不列出任何源文件的 .gyp 文件。 - Aviad Rozenhek
    @Aviad Rozenhek,简要来说,我使用了“gypify.py --sln=<path-to-vs20xx-solution-files>”,然后通过“gyp ./converted-vs20xx-sln.gyp --toplevel-dir=/path/to/project/root/ --depth=. -f [make|or|other|build] --generator-output=./<makeoutdir>”从Gyp创建了我的构建文件。希望这能有所帮助。 - Big Rich
    gyp真的支持Scons吗?太疯狂了。 - JonnyRo
    我目前正在开发一个 C++ 项目的脚本:cmakeconverter,如果您感兴趣,它可以将 .vcxproj 转换为 CMakeLists.txt - Algorys

    15

    你的方法有点反了——需要先设置好所有的CMakeLists.txt文件,然后从中生成MSVC项目。

    这并不难也不会花费很长时间。基本上,你只需要说明要搜索哪些目录、声明包含路径、使用glob表达式收集每个库的*.cpp文件以及声明依赖项。

    如果你需要设置其他任何内容,那么你的项目可能并不是特别可移植的 :-/


    1
    我知道那个选项,但是想法是用工作室中众所周知的选项替换手动编辑CMake文件。 - tikkerey
    18
    重点是,如果您的主要工具是Visual Studio,即如果您首先使用VS创建和配置项目、解决方案和依赖项,则cmake生成的MSBuild项目和VS解决方案将无法使用。如果您想支持多个平台/构建环境,唯一的选择似乎是放弃VS的舒适性,一直手动维护大量文本文件。一个可以执行“反向生成”的工具确实是非常宝贵的... - Paul Michalik
    4
    同意,CMake 的整个目的是将项目规定为一个与构建系统无关的库、程序和自定义构建步骤列表,然后在需要时由 CMake 输出一个依赖于特定构建系统的项目。我认为上面提到的转换工具很好,但仅适用于将遗留的 Visual Studio 项目首次转换为 CMake 的情况,即使这样,我仍然会手动进行编辑。 - JonnyRo
    4
    除了小型项目,手动从 VS 项目重建所有构建逻辑将变得乏味而重复。乏味而重复的事情应该由计算机完成。当人类进行这些工作时,容易出现错误。 - legalize
    如果你的目标是跨平台的,那么你需要从一开始就这样做,否则你会遇到这些头痛的问题。 - spraff
    显示剩余2条评论

    8

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接