2011-07-15 20 views
13

El CMake-CPack me ha frustrado durante casi una semana.Ruta de instalación del paquete CMake-CPack Nightmare

Lo malo es que la documentación en línea de CMake-CPack no documenta bien esta parte.

Tras Google, encontré estas variables a utilizar:

CPACK_PACKAGING_PREFIX   # NOT documented 
CMAKE_INSTALL_PREFIX   # Documented, but the behavior seems weird 
CPACK_INSTALL_PREFIX   # NOT documented 
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described 
CPACK_PACKAGING_INSTALL_PREFIX # NOT documented 

Lo que estoy tratando de hacer es: paquete de un paquete Debian usando fakeroot make package, cuando el paquete se instala de sudo dpkg -i MyProgramPackageName, instalar a /usr/local, con un subdirectorio MyProgramPackageName. Es decir, todos los archivos deben instalarse en /usr/local/MyProgramPackageName-V.1.2.3.

He intentado (CMake 2.8.3 y CMake 2.8.5) ajustar estas variables. Intenté tantas combinaciones, pero fallé.

La única forma de éxito es:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3) 

Pero incluso esta variable no está documentado, y el comportamiento no puede ser garantizada. Si está confundido con mi pregunta, avíseme cuándo utilizar CPACK_PACKAGE_INSTALL_DIRECTORY? porque la descripción de la documentación sobre esta variable es realmente atractiva, y es realmente lo que quiero, pero no pude hacerlo funcionar.

Por favor, avísenme.

Peter

Respuesta

0

Los caminos utilizados por el CPACK se toman de las directivas instalar en su CMakeLists.txt archivos. Esto permite que el paquete resultante refleje lo que haría una 'instalación'. Esto mantiene la configuración de CPACK al mínimo.

Así, a partir de un archivo de ejemplo CMakeLists.txt:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin) 

Esto instalará en/usr/bin o/usr/local/bin. Si quería colocarlo en un subdirectorio o uno completamente diferente, que podría hacer aquí

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir) 
+0

Estoy confundido. Estoy usando CPACK para empaquetarlo, para que instale la aplicación donde yo quiera. En la directiva 'INSTALL', siempre estoy instalando una carpeta o archivos en una ruta relativa a INSTALL_PREFIX/DIRECTORY. –

+2

Solo desea una ruta relativa en el destino de la instalación: se instalará en relación con el CMAKE_INSTALL_PREFIX automáticamente, sin necesidad de especificarlo. Especificar una ruta absoluta es una forma conveniente de desordenar todo esto de instalación. –

9

no he encontrado ninguna documentación que justifique esto, pero he encontrado algunos informes de errores y archivos de correo electrónico que parecen sugieren que la siguiente es lo que debe hacer:

set(CPACK_SET_DESTDIR true) 
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

Si CPACK_INSTALL_PREFIX no se establece, por defecto lo CMAKE_INSTALL_PREFIX. Ahora las rutas relativas desde install(... DESTINATION dest) terminarán como CPACK_INSTALL_PREFIX/dest dentro de su archivo de paquete. Esto funcionó cuando traté de generar un archivo deb.

+0

Voy a intentar su sugerencia el próximo lunes, y le haré saber los resultados. Gracias. –

+2

funcionó para mí, gracias. – usr1234567

Cuestiones relacionadas