【问题标题】:Is it possible to force CMake generate Visual Studio project on other project type generation?是否可以强制 CMake 在其他项目类型生成上生成 Visual Studio 项目?
【发布时间】:2015-09-08 02:37:43
【问题描述】:

我有一个 CMake 项目。它是一个由开发人员团队开发的跨平台项目。 Visual Studio 和其他 make 文件在库发布和外部开发人员的版本控制中。

每次添加文件时,我们都需要为所有平台重新编译所有项目文件。如何强制 CMake 一次为所有系统生成新的项目文件(如果可能,从 CMakeLists.txt 内部,而不是作为命令行参数)?

【问题讨论】:

  • Visual Studio 的每个版本都会生成不同版本的项目文件。 VS6 是 dsp,VS7 到 VS9 vcproj - 完全不同,VS10 到 VS13 vcxproj - 完全不同。如果您尝试跟上不同版本的 Visual Studio,您将永远在那里。另外还要考虑是32位/64位,unicode/mbcs。
  • 我也不推荐它,但既然你要求强制 CMake 这样做:假设使用的生成器和匹配的二进制输出目录是知道你可以做例如if (FORCE_CMAKE)unset(FORCE_CMAKE CACHE)else()if (NOT "${CMAKE_GENERATOR}" STREQUAL "Visual Studio 9 2008")execute_process(COMMAND ${CMAKE_COMMAND} -DFORCE_CMAKE=1 -H"${CMAKE_SOURCE_DIR}" -B"MyBuildVS2008Dir" -G"Visual Studio 9 2008")endif()...endif()。只需完成列表,每次触发重新配置时,它也会检查其他配置。

标签: c++ c visual-studio cmake projects-and-solutions


【解决方案1】:

我认为在 CMakeLists.txt 文件中实现这一点是没有意义的。 CMake 是一个 makefile 生成器。 CMakeLists.txt 文件中的所有内容都在配置 makefile,它也可以重新用于制作项目文件。

如果 CMakeLists.txt 文件也可以请求生成不同类型的 makefile...它与 CMakeLists.txt 文件中的所有其他命令不同,因为它不描述当前选择的 makefile。

如果我是你,我只会制作一个与 CMake 分开的 shell 脚本或简单的 makefile,它通过使用适当参数从命令行调用 CMake 来重建每个项目文件。

【讨论】:

    【解决方案2】:

    版本化 CMake 生成的构建脚本的目标是不强制开发人员安装 CMake?

    无论如何:最好为正确的工作使用正确的工具。 CMake 用于生成构建文件和必要的小脚本。根据需要,使用脚本环境(Bash、cmd.exe)为所有平台运行 CMake。

    这使 CMake 文件保持干净(并且可读,CMake 脚本难以阅读)并提供干净的关注点分离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2010-09-28
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多