使用 CMake 编译 QTCreator 和 VisualStudio 代码
Posted
技术标签:
【中文标题】使用 CMake 编译 QTCreator 和 VisualStudio 代码【英文标题】:QTCreator and VisualStudio Code compilation with CMake 【发布时间】:2020-05-26 21:31:20 【问题描述】:我有一个关于程序编译的问题。我不知道为什么在 QTcreator 而不是在 Visual Studio 中编译相同的 CMakeLists.txt。我正在使用与 Windows 版 MinGW 完全相同的编译器。我已阅读文档,如果使用翻译文件untitled_fr_FR.ts,它编译得很好EXCEPT。
请参阅 CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
#---------------------------------------------------------------------
# I ADD THIS ONE TO COMPILE IN VSCODE AS ASKED IN THE DOCUMENTATION
#---------------------------------------------------------------------
set(CMAKE_PREFIX_PATH $CMAKE_PREFIX_PATH "C:\\Qt\\5.15.0\\mingw81_64")
#---------------------------------------------------------------------
project(untitled LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
set(TS_FILES untitled_fr_FR.ts)
add_executable(untitled
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
$TS_FILES
)
target_link_libraries(untitled PRIVATE Qt5::Widgets)
qt5_create_translation(QM_FILES $CMAKE_SOURCE_DIR $TS_FILES)
此代码在 QTCreator 中运行良好,但在 VSCode 中出现此错误:
[main] Building folder: untitled
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/remi/Desktop/ok/untitled/build --config Debug --target all -- -j 6
[build] [ 16%] Automatic MOC and UIC for target untitled
[build] [ 16%] Built target untitled_autogen
[build] mingw32-make.exe[2]: *** No rule to make target '../', needed by '../untitled_fr_FR.ts'. Stop.
[build] mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:95: CMakeFiles/untitled.dir/all] Error 2
[build] mingw32-make.exe: *** [Makefile:103: all] Error 2
[build] Build finished with exit code 2
***** No rule to make target '../', needed by '../untitled_fr_FR.ts'. Stop.**
我该如何解决这个问题?如何确定 QTCreator 在 CMake 文件/env 中发生了什么变化以编译 .ts 文件?
非常感谢您的帮助,希望我清楚,我不会打扰您。
【问题讨论】:
也许,尝试从命令中删除$CMAKE_SOURCE_DIR
:qt5_create_translation(QM_FILES $CMAKE_SOURCE_DIR $TS_FILES)
。包含此 $CMAKE_SOURCE_DIR
参数将处理 CMAKE_SOURCE_DIR
中的源,但您似乎已经从该目录中显式添加了 TS_FILES
源,因此拥有两个参数是多余的......
@squareskittles 感谢您的回答。它工作得更好,但仍然失败 [build] [33%] 生成 ../untitled_fr_FR.ts [build] lupdate 错误:列表文件''不可读。 [build] mingw32-make.exe[2]: *** [CMakeFiles\untitled.dir\build.make:81: ../untitled_fr_FR.ts] 错误 1
抱歉,我之前的评论可能有点误导。这个command 的文档有点不清楚。似乎它可能需要列出的 .ts
文件具有相应的同名 source 文件。因此,您的 untitled_fr_FR.ts
文件可能需要相应的 untitled_fr_FR.cpp
文件。您可以尝试重命名您的 .ts
文件以匹配您的 .cpp
文件之一。
谢谢...在将 untitled_fr_FR.ts 重命名为 mainwindow.ts 并将 set(TS_FILES untitled_fr_FR.ts) 更改为 set(TS_FILES mainwindow.ts) 后,它可以工作。但我不明白为什么: - 我不需要在 QTCreator 中这样做 - 如果我有多个窗口,它是如何工作的?我是***的新手,我现在不知道该怎么办,我需要回答我自己的问题吗?
是的,不幸的是我看到的documentation并不清楚,也不清楚为什么QTCreator不需要更改。文档建议参数可以是 ts 文件或源,因此对于多个文件,您可以执行 qt5_create_translation(QM_FILES mainwindow.cpp mainwindow.ts otherwindow.cpp otherwindow.ts ... )
之类的操作。我现在没有办法测试它。但是,是的,回答您自己的问题以记录有效的方法会很有帮助,这将有助于未来的访问者访问您的问题。
【参考方案1】:
包含翻译的最佳方法是不使用此方法。编译程序的 CMakeLists.txt 是:
cmake_minimum_required(VERSION 3.5)
#---------------------------------------------------------------------
# I ADD THIS ONE TO COMPILE IN VSCODE AS ASKED IN THE DOCUMENTATION
#---------------------------------------------------------------------
set(CMAKE_PREFIX_PATH $CMAKE_PREFIX_PATH "C:\\Qt\\5.15.0\\mingw81_64")
#---------------------------------------------------------------------
project(untitled LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(untitled
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
target_link_libraries(untitled PRIVATE Qt5::Widgets)
如果你想编译它(在 Qt 环境之外你需要使用这个:
cmake_minimum_required(VERSION 3.5)
#---------------------------------------------------------------------
# I ADD THIS ONE TO COMPILE IN VSCODE AS ASKED IN THE DOCUMENTATION
#---------------------------------------------------------------------
set(CMAKE_PREFIX_PATH $CMAKE_PREFIX_PATH "C:\\Qt\\5.15.0\\mingw81_64")
#---------------------------------------------------------------------
project(untitled LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
set(TS_FILES mainwindow.ts)
add_executable(untitled
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
$TS_FILES
)
target_link_libraries(untitled PRIVATE Qt5::Widgets)
qt5_create_translation(QM_FILES $TS_FILES)
并在 mainwindow.ts
中重命名 untitled_fr_FR.ts【讨论】:
以上是关于使用 CMake 编译 QTCreator 和 VisualStudio 代码的主要内容,如果未能解决你的问题,请参考以下文章
带有 CMake 的 QtCreator,在编辑器中错误地解析了 __cplusplus 值
如何使用 QtCreator 为 Android/iOS 构建基于 CMake 的项目
qtserialport 与 qtcreator-ros-plugin 中的 CMake?