问题描述
如果你在使用camke+vs生成qt界面程序时,遇到错误:MSB3073 命令setlocal,且你的.ui文件与.cpp文件不是放在一个目录下,那么这篇博客可能帮助到你
例如下面的文件组织方式:
|___ CMakeLists.txt
|___ MyProject.pro
|___ resource.qrc
|___ source
| |___ mainwindow.cpp
| |___ *.cpp
|___ include
| |___ mainwindow.h
| |___ *.h
|___ Form
| |___ mainwindow.ui
| |___ *.h
原因分析:
这与AUTOUIC的行为有关系,当他被启用时,CMake 将扫描Source文件夹以查找包含的 ui 文件,并使用工具自动处理它们
解决方案:
方法1:将.ui文件的路径赋值给CMAKE_AUTOUIC_SEARCH_PATHS变量,告诉 AUTOUIC找到.ui文件的路径
set(CMAKE_AUTOUIC_SEARCH_PATHS ./Form)
方法2:禁用AUTOUIC,并使用qt5_wrap_ui,描述UI 文件的完整路径
set(CMAKE_AUTOUIC OFF)
set(UI ${CMAKE_CURRENT_LIST_DIR}/mainwindow.ui)
...
qt5_wrap_ui(UI_HEADERS ${UI})
add_executable(${PROJECT_NAME} ${UI_HEADERS} ${RESOURCE} ${SOURCES} )