CMake: вызов пользовательской команды как части make install

#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. Я этого не знал, думаю, теперь понимаю.