Запретить cmake запускать cpack

У меня есть проект CMake, в котором я хочу запретить make package делать что-то большее, чем печатать сообщение на некоторых платформах.

Я знаю, как добавить сообщение, даже фатальное, но оно выполняется во время генерации cmake, а не во время сборки. Должен ли я прибегать к некоторым add_custom_command? И это не даст мне того, что я хочу, так как это создает новую цель сборки...

Как я могу переопределить цель package для некоторых платформ, чтобы просто показывать сообщение?


person thoni56    schedule 03.06.2016    source источник


Ответы (2)


Как указал Шу, вы можете сделать что-то вроде этого:

if (! WIN32)
    include(cpack)
else()
    cmake_policy(SET CMP0037 OLD)
    add_custom_target(package
        #add dependencies on other targets here
        #[[DEPENDS install]]
        COMMAND ${CMAKE_COMMAND} -E echo "custom target for non windows platforms!"
)
endif()

Обратите внимание, что по умолчанию вам не разрешается переопределять зарезервированные цели, такие как test и package. Мы отключаем эту политику здесь, чтобы написать нашу собственную цель пакета.

person ShS    schedule 30.06.2016

зачем вообще включать cpack в список cmake?

Чтобы проект cmake имел цель пакета, контролируемого cpack, ваш проект должен включать строку вроде:

include(CPack)

а также настроить некоторые свойства, связанные с cpack. Если вы этого не хотите, вы можете просто удалить эту строку.

person Community    schedule 29.06.2016
comment
на некоторых платформах, но я, конечно, мог бы сделать включение условно. - person thoni56; 29.06.2016
comment
Итак, вы хотите, чтобы исходный код генерировал make-файл, который не работает с целевым пакетом, который ничего не делает, скажем, в Linux? Поскольку вы не говорите, скажем, об установщике deb (результат пакета cpack), который отказывается устанавливать, если платформа, скажем, 32-битная, верно? - person ; 30.06.2016
comment
Верно. Нет, я хочу, чтобы целевой «пакет» либо печатал сообщение (предпочтительно), либо вообще не существовал. Итак, stackoverflow.com/a/38119685/204658 — это то, что я искал. - person thoni56; 30.06.2016