programas para gratis descomprimir descargar comprimir como archivos archivo abrir zip cmake cpack

para - archivos zip utilizando CMake?



winrar (4)

Esencialmente lo que hice fue crear objetivo personalizado

add_custom_target(STAGE_FILES)

Con este objetivo copio los archivos y directorios al CMAKE_CURRENT_BINARY_DIR

add_custom_command( TARGET STAGE_FILES COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets/video ${CMAKE_CURRENT_BINARY_DIR}/video COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets/data ${CMAKE_CURRENT_BINARY_DIR}/data COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/assets/strings_en.csv ${CMAKE_CURRENT_BINARY_DIR}/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/assets/strings_rules_en.csv ${CMAKE_CURRENT_BINARY_DIR}/ COMMAND ${CMAKE_COMMAND} -E tar "cfv" "data.zip" --format=zip --files-from=${CMAKE_SOURCE_DIR}/assets/to_zip.txt COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/data COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/data.zip ${CMAKE_CURRENT_BINARY_DIR}/data )

La linea importante

COMMAND ${CMAKE_COMMAND} -E tar "cfv" "data.zip" --format=zip --files-from=${CMAKE_SOURCE_DIR}/assets/to_zip.txt

dentro de mi

to_zip.txt

Especifico todos los archivos que quiero incluir en mi zip

data/ video/ ...

Ahora puedo ejecutar el comando

make STAGE_FILES

que copiará y comprime todo lo que necesito.

tl; versión dr: ¿ es posible con CMake (> = 2.8) generar archivos zip desde algunos archivos y colocar el archivo zip empaquetado en una ubicación específica?

versión más larga: tengo un CMakeLists.txt que construye mi proyecto en un archivo .exe. Y este archivo exe leerá los datos de un archivo zip. Ahora es para que el contenido que se va a empaquetar en el archivo zip esté en mi repositorio git para que también pueda editarse. Pero el programa necesita estos datos en un archivo zip. Por lo tanto, sería bueno que el script cmake pudiera tomar los datos, colocarlos en un archivo zip y colocarlos al lado del archivo ejecutable. Ya escuché hablar de CPack, pero no encontré ejemplos fáciles y no estoy seguro de que sea la herramienta adecuada para mi tarea.

es posible? Si es así, ¿cómo?


Nunca es tarde para mostrar una respuesta real:

function(create_zip output_file input_files working_dir) add_custom_command( COMMAND ${CMAKE_COMMAND} -E tar "cf" "${output_file}" --format=zip -- ${input_files} WORKING_DIRECTORY "${working_dir}" OUTPUT "${output_file}" DEPENDS ${input_files} COMMENT "Zipping to ${output_file}." ) endfunction()

Utilizar como

file(GLOB ZIP_FILES "${CMAKE_CURRENT_SOURCE_DIR}/zip/*") create_zip("${CMAKE_CURRENT_BINARY_DIR}/native_data.zip" "${ZIP_FILES}" "${CMAKE_CURRENT_SOURCE_DIR}/zip")

Esto empaquetará todos los archivos de zip/ subdirectory en native_data.zip (en el directorio de compilación). Luego, incluya su archivo (la ruta diferirá en diferentes CMakeLists.txt !) Como archivo fuente o añádalo como destino:

add_custom_target("project-data" ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/native_data.zip")

La instalación no diferirá mucho de lo habitual:

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/native_data.zip" DESTINATION ${DATADIR} RENAME "data000.zip") # Install our zip (as data000.zip)


Supongo que ya tiene instalada una herramienta zip (WinZip o 7z, etc.). Podría escribir un script de find_zip-tool que buscará WinZip, o 7Z, etc.

Fragmento de código para WinZip:

FIND_PROGRAM(ZIP_EXECUTABLE wzzip PATHS "$ENV{ProgramFiles}/WinZip") IF(ZIP_EXECUTABLE) SET(ZIP_COMMAND "/"${ZIP_EXECUTABLE}/" -P /"<ARCHIVE>/" @<FILELIST>") ENDIF(ZIP_EXECUTABLE)

Fragmento de 7-zip:

FIND_PROGRAM(ZIP_EXECUTABLE 7z PATHS "$ENV{ProgramFiles}/7-Zip") IF(ZIP_EXECUTABLE) SET(ZIP_COMMAND "/"${ZIP_EXECUTABLE}/" a -tzip /"<ARCHIVE>/" @<FILELIST>") ENDIF(ZIP_EXECUTABLE)

Echa un vistazo al archivo

<cmake-install-dir>/share/cmake-2.8/Modules/CPackZIP.cmake

muestra cómo CPack busca un archivo Zip_Executable y prepara algunas banderas predeterminadas "útiles".

Después de eso, sugeriría ejecutar_proceso, similar a la respuesta de sakra


Desde la versión 3.2, CMake tiene la funcionalidad para generar un archivo zip integrado. El sub-comando tar modo de línea de comandos CMake admite tanto la creación de archivos zip como 7zip.

Por ejemplo, si el directorio de origen de CMake actual contiene el archivo testfile.txt y el directorio testdir , puede usar los siguientes comandos de CMake para crear un archivo zip que contenga ambos elementos:

add_custom_target(create_zip COMMAND ${CMAKE_COMMAND} -E tar "cfv" "archive.zip" --format=zip "${CMAKE_CURRENT_SOURCE_DIR}/testfile.txt" "${CMAKE_CURRENT_SOURCE_DIR}/testdir")

Como solución alternativa para las versiones anteriores de CMake, puede utilizar el comando jar que forma parte de una instalación estándar de Java JRE.

find_package(Java) execute_process( COMMAND "${Java_JAR_EXECUTABLE}" "cfM" "archive.zip" "-C" "${CMAKE_CURRENT_SOURCE_DIR}" "testfile.txt" "-C" "${CMAKE_CURRENT_SOURCE_DIR}" "testdir" RESULT_VARIABLE _result )

El archivo zip se generará en el directorio binario actual de CMake ( CMAKE_CURRENT_BINARY_DIR ).