Как сохранить права доступа к файлам с помощью директивы каталога установки cmake?

Пролог: я идиот, раз пропустил это в документации

cmake-2.8.10.2

Как вы заставляете cmake сохранять исходные права доступа к файлам при установке каталога? Для данного проекта я хотел бы, чтобы он по существу скопировал некоторые каталоги из моего исходного дерева в дерево установки. А именно:

install(
  DIRECTORY config runp
  DESTINATION ${CMAKE_INSTALL_PREFIX}
  PATTERN ".svn" EXCLUDE
  PATTERN ".git" EXCLUDE
  PATTERN "start_collection.snl" EXCLUDE
)

Все работает так, как ожидалось, за исключением того, что исполняемые скрипты копируются с неправильными правами доступа к файлам. На самом деле ни одно исходное разрешение файла не сохраняется. Глобальная установка разрешений с использованием FILE_PERMISSIONS и DIRECTORY_PERMISSIONS — это то, чего я не хочу делать, и, честно говоря, в этом контексте это было бы хаком.

В мире сценариев оболочки я бы сделал что-то простое:

for i in config runp ; do
  tar cf - $i | tar -C $CMAKE_INSTALL_PREFIX -xf -
done

person smcdow    schedule 28.11.2012    source источник


Ответы (1)


Документация предлагает использовать USE_SOURCE_PERMISSIONS при вызове install():

install(
  DIRECTORY config runp
  DESTINATION ${CMAKE_INSTALL_PREFIX}
  USE_SOURCE_PERMISSIONS
  PATTERN ".svn" EXCLUDE
  PATTERN ".git" EXCLUDE
  PATTERN "start_collection.snl" EXCLUDE
)

В качестве альтернативы вы можете использовать install(PROGRAMS сигнатуру этой команды. дополнительную информацию см. в документации.

person arrowd    schedule 29.11.2012
comment
Ну, я идиот. Я как-то упустил этот вариант в документации. Спасибо, что указали на это. - person smcdow; 29.11.2012
comment
Спасибо; просто хотел отметить, что USE_SOURCE_PERMISSIONS работает только с install(DIRECTORY). Из ответа сразу не стало ясно. - person congusbongus; 02.09.2013