Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake 2.8.11.2与qt 5.1韩元的组合';t创建ui_xxx.h文件_Qt_Cmake - Fatal编程技术网

cmake 2.8.11.2与qt 5.1韩元的组合';t创建ui_xxx.h文件

cmake 2.8.11.2与qt 5.1韩元的组合';t创建ui_xxx.h文件,qt,cmake,Qt,Cmake,我最近开始使用cmake来管理我的qt项目,主要是为了能够轻松地在VisualStudio2012和xcode之间切换 现在我面临一个奇怪的问题(奇怪,因为我很确定这已经奏效了) 问题是cmake(确切地说是cmake gui)不会创建ui_xxx.h文件(不再?)。我已经在互联网上搜索了一个解决方案,但似乎只有我一个人有这个问题;) 为了简单起见,为了消除我个人的错误或愚蠢,我还尝试了以下基本设置: 但是仍然没有ui_xxx.h 我在两台不同的(Windows7 64位)机器上测试了这个,结

我最近开始使用cmake来管理我的qt项目,主要是为了能够轻松地在VisualStudio2012和xcode之间切换

现在我面临一个奇怪的问题(奇怪,因为我很确定这已经奏效了)

问题是cmake(确切地说是cmake gui)不会创建ui_xxx.h文件(不再?)。我已经在互联网上搜索了一个解决方案,但似乎只有我一个人有这个问题;)

为了简单起见,为了消除我个人的错误或愚蠢,我还尝试了以下基本设置:

但是仍然没有ui_xxx.h

我在两台不同的(Windows7 64位)机器上测试了这个,结果相同

正如我在本文主题中所描述的,我使用的是cmake版本2.8.11.2和Qt5.1。我将环境变量QTDIR设置为“c:\Qt\Qt5.1.0\5.1.0\msvc2010\”,并将“%QTDIR%\bin”添加到路径中

对于上面链接中使用的CMakeLists.txt文件,我得到的唯一警告是“未设置策略CMP0020”,可以通过在文件中添加“cmake_策略(设置CMP0020旧)”轻松关闭该警告


我遗漏了什么?

其他人真的没有这个问题吗

我试图进一步调试该问题,因此修改了Qt5WidgetsMacros.cmake以输出它使用的每个变量。我的Qt5WidgetsMacros.cmake现在看起来像这样:

function(PRINT_LIST caption items)
    set(i 1)
    foreach (item ${items})
        message(${caption} " " ${i} ": " ${item})
        math(EXPR i "${i}+1")
    endforeach()
endfunction()

# qt5_wrap_ui(outfiles inputfile ... )

function(QT5_WRAP_UI outfiles )
    set(options)
    set(oneValueArgs)
    set(multiValueArgs OPTIONS)

    cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

    set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS})
    set(ui_options ${_WRAP_UI_OPTIONS})

    PRINT_LIST("Option" "${options}")
    PRINT_LIST("oneValueArg" "${oneValueArgs}")
    PRINT_LIST("multiValueArg" "${multiValueArgs}")
    PRINT_LIST("ARGN" "${ARGN}")
    PRINT_LIST("UI file" "${ui_files}")
    PRINT_LIST("UI option" "${ui_options}")

    foreach(it ${ui_files})
        get_filename_component(outfile ${it} NAME_WE)
        message("outfile: " ${outfile})
        get_filename_component(infile ${it} ABSOLUTE)
        message("infile: " ${infile})
        set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
        message("outfile: " ${outfile})
        message("Qt5Widgets_UIC_EXECUTABLE: " ${Qt5Widgets_UIC_EXECUTABLE})
        add_custom_command(OUTPUT ${outfile}
            COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
            ARGS ${ui_options} -o ${outfile} ${infile}
            MAIN_DEPENDENCY ${infile} VERBATIM)
        list(APPEND ${outfiles} ${outfile})
    endforeach()

    PRINT_LIST("Outfile" "${outfiles}")
    set(${outfiles} ${${outfiles}} PARENT_SCOPE)
    PRINT_LIST("Outfile" "${outfiles}")
endfunction()
我的原始帖子中链接的CMakeLists.txt文件的输出是:

看起来不错,但仍然:没有ui_主窗口

为完整起见,以下是我的qt设置:

QT_SYSROOT:
QT_INSTALL_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_INSTALL_ARCHDATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_INSTALL_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\
QT_INSTALL_DOCS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\doc
QT_INSTALL_HEADERS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\include
QT_INSTALL_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib
QT_INSTALL_LIBEXECS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\libexec
QT_INSTALL_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin
QT_INSTALL_TESTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\tests
QT_INSTALL_PLUGINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\plugins
QT_INSTALL_IMPORTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\imports
QT_INSTALL_QML:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\qml
QT_INSTALL_TRANSLATIONS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples
QT_INSTALL_DEMOS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples
QT_HOST_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_HOST_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_HOST_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin
QT_HOST_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib
QMAKE_SPEC:win32-msvc2012
QMAKE_XSPEC:win32-msvc2012
QMAKE_VERSION:3.0
QT_VERSION:5.1.0

有什么想法吗?

其他人真的没有这个问题吗

我试图进一步调试该问题,因此修改了Qt5WidgetsMacros.cmake以输出它使用的每个变量。我的Qt5WidgetsMacros.cmake现在看起来像这样:

function(PRINT_LIST caption items)
    set(i 1)
    foreach (item ${items})
        message(${caption} " " ${i} ": " ${item})
        math(EXPR i "${i}+1")
    endforeach()
endfunction()

# qt5_wrap_ui(outfiles inputfile ... )

function(QT5_WRAP_UI outfiles )
    set(options)
    set(oneValueArgs)
    set(multiValueArgs OPTIONS)

    cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

    set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS})
    set(ui_options ${_WRAP_UI_OPTIONS})

    PRINT_LIST("Option" "${options}")
    PRINT_LIST("oneValueArg" "${oneValueArgs}")
    PRINT_LIST("multiValueArg" "${multiValueArgs}")
    PRINT_LIST("ARGN" "${ARGN}")
    PRINT_LIST("UI file" "${ui_files}")
    PRINT_LIST("UI option" "${ui_options}")

    foreach(it ${ui_files})
        get_filename_component(outfile ${it} NAME_WE)
        message("outfile: " ${outfile})
        get_filename_component(infile ${it} ABSOLUTE)
        message("infile: " ${infile})
        set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
        message("outfile: " ${outfile})
        message("Qt5Widgets_UIC_EXECUTABLE: " ${Qt5Widgets_UIC_EXECUTABLE})
        add_custom_command(OUTPUT ${outfile}
            COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
            ARGS ${ui_options} -o ${outfile} ${infile}
            MAIN_DEPENDENCY ${infile} VERBATIM)
        list(APPEND ${outfiles} ${outfile})
    endforeach()

    PRINT_LIST("Outfile" "${outfiles}")
    set(${outfiles} ${${outfiles}} PARENT_SCOPE)
    PRINT_LIST("Outfile" "${outfiles}")
endfunction()
我的原始帖子中链接的CMakeLists.txt文件的输出是:

看起来不错,但仍然:没有ui_主窗口

为完整起见,以下是我的qt设置:

QT_SYSROOT:
QT_INSTALL_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_INSTALL_ARCHDATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_INSTALL_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\
QT_INSTALL_DOCS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\doc
QT_INSTALL_HEADERS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\include
QT_INSTALL_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib
QT_INSTALL_LIBEXECS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\libexec
QT_INSTALL_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin
QT_INSTALL_TESTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\tests
QT_INSTALL_PLUGINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\plugins
QT_INSTALL_IMPORTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\imports
QT_INSTALL_QML:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\qml
QT_INSTALL_TRANSLATIONS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples
QT_INSTALL_DEMOS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples
QT_HOST_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_HOST_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012
QT_HOST_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin
QT_HOST_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib
QMAKE_SPEC:win32-msvc2012
QMAKE_XSPEC:win32-msvc2012
QMAKE_VERSION:3.0
QT_VERSION:5.1.0

有什么想法吗?

我猜UI文件是在构建路径的
UI
子目录中生成的。查看构建路径并尝试搜索文件所在的位置。嗨,Pavel,谢谢你的回复,但是。。。当您只有大约3个文件时,不难看到生成的文件。文件不在那里,所以问题更像是:我是否忘记设置一些环境变量,或者在cmake中是否有一个选项会输出生成错误,例如“无法创建ui_xxx.h文件”,这只在使用VS时发生?你看过Qt Visual Studio加载项了吗?刚刚用MinGW试用过。同样的结果。我猜UI文件是在构建路径的
UI
子目录中生成的。查看构建路径并尝试搜索文件所在的位置。嗨,Pavel,谢谢你的回复,但是。。。当您只有大约3个文件时,不难看到生成的文件。文件不在那里,所以问题更像是:我是否忘记设置一些环境变量,或者在cmake中是否有一个选项会输出生成错误,例如“无法创建ui_xxx.h文件”,这只在使用VS时发生?你看过Qt Visual Studio加载项了吗?刚刚用MinGW试用过。同样的结果。抱歉,伙计们,我的坏:(尴尬,但仍然:是我对这应该如何工作的误解导致了我的问题。我认为cmake会为我调用uic.exe(就像它调用moc.exe一样),并会立即创建ui_xxx.h文件。实际上,它只是在makefile中为项目引入了自定义构建步骤(或者在我的VS2012项目中)。因此,ui_xxx文件只有在我构建项目时才会生成。嗯……也许我的错误对其他人仍然有帮助。那么发生了什么?每当我调用我的makefile构建项目时,我的ui_xxx.h头都会说它们丢失了?对不起,我的错:(令人尴尬,但仍然是:是我对这应该如何工作的误解导致了我的问题。我认为cmake会为我调用uic.exe(就像它调用moc.exe一样),并会立即创建ui_xxx.h文件。实际上,它只是在makefile(或者在我的VS2012项目中)的项目中引入了自定义构建步骤)。因此,ui_xxx文件仅在我构建项目时生成。嗯……也许我的错误对其他人仍然有帮助。那么发生了什么?每当我调用makefile构建项目时,我的ui_xxx.h头都会说它们丢失了?