2016-12-08 2 views
1

Я пытаюсь создать приложение на основе QT с CMake и все будет достаточно хорошо. Я последовал за this учебником, и я могу создать свое приложение. Теперь я хочу запустить npm run build, прежде чем строить с использованием add_custom_command, похоже, что он не соответствует ожиданиям.Запустить команду npm до конкретной цели cmake

Процесс сборки завершается с

RCC: Error in 'tray-icon/systray.qrc': Cannot find file 'html/js/app.full.js' 
AUTORCC: error: process for.build/Debug/x64/tray-icon/CMakeFiles/tray-icon.dir/qrc_systray.cpp failed: 
RCC: Error in 'tray-icon/systray.qrc': Cannot find file 'html/js/app.full.js' 

Можете ли вы сказать мне, как выполнить команду npm перед этапом проверки сборки на tray-icon/systray.qrc?

Это мой CMake файл

cmake_minimum_required(VERSION 2.8.11) 
project(tray-icon) 

set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTORCC ON) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

find_package(Qt5Widgets 5.5) 
find_package(Qt5Qml 5.5) 
find_package(Qt5WebEngine 5.5) 
find_package(Qt5WebEngineCore 5.5) 
find_package(Qt5WebEngineWidgets 5.5) 

# generate rules for building source files from the resources 
set(SOURCES tray-icon.cpp window.cpp systray.qrc) 

set(CMAKE_VERBOSE_MAKEFILE 1) 
#adds target 
add_executable(tray-icon ${SOURCES}) 

# custom build command for javascript part of the application 
add_custom_command (
    TARGET "tray-icon" 
    PRE_BUILD COMMAND npm run build 
) 

# Find the QtWidgets library 
target_link_libraries(tray-icon 
     Qt5::Widgets 
     Qt5::WebEngine 
     Qt5::WebEngineWidgets) 

install(TARGETS tray-icon DESTINATION .) 

PS: Мое окончательное решение выглядит следующим образом

# custom build command for javascript part of the application 
add_custom_target(
    tray-icon_automoc 
) 
add_custom_target (
     npm-target 
     COMMAND cd ${PROJECT_SOURCE_DIR} && cd html && npm install && npm run build 
) 

ответ

1

Вы можете попробовать add_custom_target и add_dependencies.

add_custom_target (
    npm-target 
    COMMAND npm run build 
) 
add_dependencies(tray-icon npm-target) 

Чтобы преодолеть проблемы, упомянутые в комментариях, вы должны быть в состоянии добавить зависимость, используя AUTOGEN_TARGET_DEPENDS свойство цели. Вместо этого он может быть установлен в список зависимостей для цели _automoc.

+0

Ну, это кажется достаточно хорошим, но проблема в том, что перед мишенью «tray-icon» есть цель «tray-icon_automoc», которая автоматически генерируется. Это тот шаг, который QT проверяет, существует ли файл. Если я попытаюсь изменить 'add_dependencies (лот-значок npm-target)' на 'add_dependencies (tray-icon_automoc npm-target)', я получаю ошибку, что цель не определена. – melanholly

+1

Я сделал это, добавив пользовательский целевой лоток-icon_automoc, а затем, изменив «add_dependencies», чтобы зависеть от этой цели, я заставил ее работать правильно. – melanholly

Смежные вопросы