#cmake #pip
#cmake #pip
Вопрос:
Я работаю над проектом CMake, в котором я хочу установить сгенерированный модуль Python как часть make install
. Я попробовал следующее, где переменные CMake, надеюсь, понятны сами по себе:
add_custom_command(
OUTPUT "${PYTHON_MODULE}.egg-info"
COMMAND pip install "${PYTHON_BIN_DIR}"
DEPENDS "${PYTHON_MODULE_SO}"
)
add_custom_target(python_egg DEPENDS "${PYTHON_MODULE}.egg-info")
install(TARGETS python_egg)
Однако это приводит к install TARGETS given target "python_egg" which is not an executable, library, or module.
. Я знаю, что мог бы вместо этого использовать, install(FILES,...
но я не хочу копировать сгенерированный .egg-info
файл куда угодно, я просто хочу make install
запустить, pip install
если .egg-info
файл еще не существует. Возможно ли это? Или я делаю это неправильно?
Комментарии:
1. Используйте
install(CODE)
илиinstall(SCRIPT)
для запуска пользовательского кода во время установки.2. @Tsyvarev: Но тогда как я могу убедиться, что pip запускается только тогда, когда .egg-info не существует? Я не могу указать зависимости с помощью
install(SCRIPT ...)
.3. Вы не можете указать зависимости с помощью какой-либо
install
команды, в любой форме. Предполагается, чтоALL
(по умолчанию) target создает все файлы, необходимые для процесса установки. Вы можете добавитьALL
ключевое слово к своей пользовательской цели, и оно будет гарантированно создано до запуска любой логики установки.4. Я этого не знал, думаю, теперь понимаю.