2012-10-25 54 views
1

我正试图调试命令行CMake失败。相同的CMake文件在Qt Creator中工作,Qt Creator窗口中的参数与我在命令行中输入的参数相匹配。如何查看Qt Creator执行的CMake命令行语句?

这让我想到Qt Creator正在添加一些额外的参数,这是有道理的,因为生成器下拉列表有几个选项来指定架构和CMake版本。

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

我发现一篇文章谈论查看CMakeCache文件做一些取证,但这只能证明存在差异,它并不能很快向我展示哪些参数需要改变。

+0

你使用了什么发电机? – arrowd

+0

这个特殊的问题出现在Windows上,我正在使用Visual Studio 2010 C++ x64的NMake生成器。同样的项目建立在Mac和Linux上,我们使用Unix Generator(GCC,64位)。我想知道在我们所有的平台上执行什么,但Windows绝对是紧迫的问题。谢谢。 – Evan

+0

你在CMakeLists.txt中有'qt_wrap_ {cpp,ui}()'调用吗? – arrowd

回答

2

尝试将下面的代码块添加到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 arg选择的发电机(如果有)。为了找到这个问题,你需要在你的CMakeCache.txt中寻找CMAKE_GENERATOR:INTERNAL=...

如果这不能帮助你确定整体问题,你应该听取@ arrowdodger的建议,并发布更多关于你得到的错误的细节,你的两个构建环境。例如,错误可能是仅仅通过从源码树的子目录运行CMake而引起的。

+0

感谢您的回答。我一直在做其他事情,但很快就会出手,并接受它的工作。从表面上看,它看起来完全像我正在寻找的东西。 – Evan