Подтвердить что ты не робот

Как добавить add_custom_target, который зависит от "make install"

Я бы хотел добавить пользовательскую цель с именем "package", которая зависит от цели установки. Когда я запустил make package, это должно привести к первому запуску make install и после этого запустить мою собственную команду для создания пакета.

Я пробовал следующий DEPENDS install, но он не работает.

Я получаю сообщение об ошибке: Нет правила для создания цели CMakeFiles/install.dir/all, необходимой CMakeFiles/package.dir/all

install(FILES
        "module/module.pexe"
        "module/module.nmf"
        DESTINATION "./extension")

add_custom_target(package
    COMMAND "chromium-browser" "--pack-extension=./extension"
    DEPENDS install)    

EDIT: Я пробовал ключевое слово DEPENDS install и add_dependencies(package install), но ни один из них не работает.

Согласно http://public.kitware.com/Bug/view.php?id=8438 невозможно добавить зависимости от встроенных целей, таких как install или test

4b9b3361

Ответ 1

Вы можете создать пользовательскую цель, которая будет запускать установку и некоторые другие script после.

CMake script

Например, если у вас есть CMake script MyScript.cmake:

add_custom_target(
    MyInstall
    COMMAND
    "${CMAKE_COMMAND}" --build . --target install
    COMMAND
    "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/MyScript.cmake"
    WORKING_DIRECTORY
    "${CMAKE_BINARY_DIR}"
)

Вы можете запустить его, построив target MyInstall:

cmake --build /path/to/build/directory --target MyInstall

Python script

Конечно, вы можете использовать любой язык сценариев. Просто помните, чтобы быть вежливым на другие платформы (так что, вероятно, это плохая идея написать bash script, он не будет работать на windows).

Например, python script MyScript.py:

find_package(PythonInterp 3.2 REQUIRED)

add_custom_target(
    MyInstall
    COMMAND
    "${CMAKE_COMMAND}" --build . --target install
    COMMAND
    "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/MyScript.py"
    WORKING_DIRECTORY
    "${CMAKE_BINARY_DIR}"
)