【发布时间】: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 中这样做 - 如果我有多个窗口,它是如何工作的?我是stackoverflow的新手,我现在不知道该怎么办,我需要回答我自己的问题吗?
-
是的,不幸的是我看到的documentation并不清楚,也不清楚为什么QTCreator不需要更改。文档建议参数可以是 ts 文件或源,因此对于多个文件,您可以执行
qt5_create_translation(QM_FILES mainwindow.cpp mainwindow.ts otherwindow.cpp otherwindow.ts ... )之类的操作。我现在没有办法测试它。但是,是的,回答您自己的问题以记录有效的方法会很有帮助,这将有助于未来的访问者访问您的问题。
标签: qt visual-studio-code cmake qt5 qt-creator