Компиляция кода QTCreator и VisualStudio с помощью CMake - PullRequest
2 голосов
/ 27 мая 2020

У меня проблема с составлением программы. Я не знаю, почему тот же CMakeLists.txt компилируется в QTcreator, а не в Visual Studio. Я использую тот же компилятор, что и MinGW для Windows. Я прочитал документацию, она хорошо компилируется EXCEPT , если используется файл перевода untitled_fr_FR.ts .

См. 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?

Большое спасибо за вашу помощь, надеюсь, я все ясно и не беспокою вас.

1 Ответ

1 голос
/ 27 мая 2020

Лучший способ включить перевод - не использовать этот метод. 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})

И переименовать untitled_fr_FR.ts в mainwindow.ts

...