LINUX.ORG.RU

CMake установка файлов в /opt (CMakeRPM)

 , ,


0

1

Доброго дня!

Столкнулся с проблемой, что при паковании CMake проекта после такого кода:

add_custom_command(TARGET ${_target} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        "${_destdir}/${_filename}" "${CMAKE_CURRENT_BINARY_DIR}/symlinks/${_filename}"
    VERBATIM
)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/symlinks/${_filename}"
    DESTINATION "/opt/lib"
)

То CMake в спеку в %files пишет (например) такое:

/opt
/opt/lib
/opt/lib/libmylibc.so

Подскажите пожалуйста, как заставить его не добавлять /opt и /opt/lib? Или как лучше устанавливать симлинки на свои либы?

как заставить его не добавлять /opt и /opt/lib?

Но ведь перед созданием файла нужно создать директорию для него. Как без неё?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Дык, в том то и дело, что /opt/lib уже существует и является стандартной. По этому его не надо включать в пакет!

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от KennyMinigun

Не знаю, как в rpm (там cpio вроде бы), но в deb с его tar все промежуточные директории есть:

$ dpkg -L libconfig-dev 
/.
/usr
/usr/include
/usr/include/libconfig.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libconfig.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/libconfig.pc
/usr/share
/usr/share/doc
/usr/share/doc/libconfig-dev
/usr/share/doc/libconfig-dev/copyright
/usr/share/doc/libconfig-dev/examples
/usr/share/doc/libconfig-dev/examples/example.cfg
/usr/share/doc/libconfig-dev/examples/example1.c
/usr/share/doc/libconfig-dev/examples/example2.c
/usr/share/doc/libconfig-dev/examples/example3.c
/usr/share/doc/libconfig-dev/examples/debian.Makefile
/usr/share/doc/libconfig-dev/changelog.Debian.gz
/usr/share/doc/libconfig-dev/changelog.gz
/usr/share/info
/usr/share/info/libconfig.info.gz
/usr/lib/x86_64-linux-gnu/libconfig.so
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В rpm /usr/include и подобными владеет пакет filesystem, остальные пакеты должны владеть только своими поддирками/файлами.

anonymous
()
Ответ на: комментарий от anonymous

Ксати говоря, эта штука появилась где-то в CMake 2.8.11 (или 2.8.12), если у кого более старая версия, то можно использовать вот такой костыль:

set (CPACK_RPM_SPEC_MORE_DEFINE "%define ignore \#")
set (CPACK_RPM_USER_FILELIST "%ignore /opt" "%ignore /opt/lib")
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.