Hi, On Wed, Nov 28, 2012 at 1:41 PM, Martin Koller <martin.kol...@etm.at> wrote: > Hi, > > I'm struggling with the following requirement: > I have a lib stored in a zip file (the lib is not built via cmake, e.g. > delivered from external company). > > I want a target to link against this lib and want to extract the lib from the > zip file only if > this specific target is being built, and only if it is not already unzipped. > > What I tried in the libs directory: > > set(TARGET xxx) > > add_library(${TARGET} STATIC IMPORTED GLOBAL) > > set_target_properties(${TARGET} PROPERTIES IMPORTED_LOCATION > ${CMAKE_CURRENT_BINARY_DIR}/xxx.a) > > set(ZIPFILE xxx.zip) > > add_custom_target(${TARGET}_lib > COMMAND unzip -o ${CMAKE_CURRENT_SOURCE_DIR}/${ZIPFILE} > DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${ZIPFILE} > ) > add_dependencies(${TARGET} ${TARGET}_lib) > > > Then I can use this target in e.g. > target_link_libraries(myTarget xxx) > > The above however unzips the lib every time, even if it is already existing. > Is it possible to avoid that ?
This should be doable by splitting the custom target into a custom command and a custom target. For the custom command you then need to list the output files generated by the unzip and thus it'll only be executed if the .zip is newer than the output files or an output file is missing. The custom target is then used to provide a dummy target (use echo or something like that as command) and depends on the output files from the custom command and used with add_dependencies. That way the custom-target will always be out-of-date and hence "built" but it only depends on the output of the custom-command which in turn knows when to re-run the command and thus only does this if necessary. Another option would be to do this in a cmake script file manually and run that via cmake -P as command. Andreas -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake