【问题标题】:How do I view the CMake command line statement that Qt Creator executes?如何查看 Qt Creator 执行的 CMake 命令行语句?
【发布时间】:2012-10-15 23:48:18
【问题描述】:

我正在尝试调试命令行 CMake 失败。相同的 CMake 文件在 Qt Creator 中工作,Qt Creator 窗口中的参数与我在命令行中输入的参数相匹配。

这让我觉得 Qt Creator 添加了一些额外的参数,这是有道理的,因为生成器下拉菜单有几个选项可以指定架构和 CMake 版本。

有没有办法让 Qt Creator 执行 CMake 命令以产生所需的结果,特别是传递给 CMake 可执行文件的参数?

我发现一篇关于查看 CMakeCache 文件以进行取证的帖子,但这仅证明存在差异,它并不能很快告诉我要更改哪些参数。

【问题讨论】:

  • 你用的是什么生成器?
  • 这个特殊问题出现在 Windows 上,我正在使用适用于 Visual Studio 2010 C++、x64 的 NMake 生成器。同一个项目是在 Mac 和 Linux 上构建的,我们使用 Unix 生成器(GCC,64 位)。我想知道在我们所有的平台上执行了什么,但 Windows 绝对是紧迫的问题。谢谢。
  • 你的 CMakeLists.txt 中有 qt_wrap_{cpp,ui}() 调用吗?
  • 我必须承认我不知道那个命令是什么。它有什么作用?这是一个库级别的项目,我使用 Qt 作为 IDE,但没有使用 Qt UI 框架。虽然我们在 Qt 中也有应用程序级软件,所以如果这是一个有用的命令,那么我会全力以赴。我用谷歌搜索了它,没有立即有用。
  • 那么,您正在使用带有 CMake 构建系统的 QtCreator,对吗?也许您应该发布错误消息或其他内容,因为不清楚是什么问题。

标签: cmake qt-creator


【解决方案1】:

尝试将以下块添加到 CMakeLists.txt 的末尾并再次从 Qt Creator 运行 CMake。 CMake 输出应列出已通过 -D 命令行参数传递的所有变量。

get_cmake_property(CacheVars CACHE_VARIABLES)
foreach(CacheVar ${CacheVars})
  get_property(CacheVarHelpString CACHE ${CacheVar} PROPERTY HELPSTRING)
  if(CacheVarHelpString STREQUAL "No help, variable specified on the command line.")
    get_property(CacheVarType CACHE ${CacheVar} PROPERTY TYPE)
    if(CacheVarType STREQUAL "UNINITIALIZED")
      set(CacheVarType)
    else()
      set(CacheVarType :${CacheVarType})
    endif()
    set(CMakeArgs "${CMakeArgs} -D${CacheVar}${CacheVarType}=\"${${CacheVar}}\"")
  endif()
endforeach()
message("CMakeArgs: ${CMakeArgs}")

有关详细信息,请参阅this answer

这不会显示通过 -G 参数选择的生成器(如果有)。要找到它,您需要在 CMakeCache.txt 中查找 CMAKE_GENERATOR:INTERNAL=...

如果这不能帮助您确定整体问题,您可能应该听取@arrowdodger 的建议,并发布有关您遇到的错误和您的两个构建环境的更多详细信息。例如,从源代码树的子目录运行 CMake 可能会导致错误

【讨论】:

  • 感谢您的回答。我一直在做其他事情,但很快就会试一试并接受等待它的工作。从表面上看,它和我要找的完全一样。
猜你喜欢
  • 2015-07-15
  • 2011-01-08
  • 2020-02-20
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
相关资源
最近更新 更多