cmakensiscpack

Error "ABSOLUTE path INSTALL DESTINATION forbidden (by caller)" when generate installer for Windows by using CPack NSIS


I´m trying to run packet generator within a VS project, it crashes while compiling because of the use of absolute path on installation from Targets and Files.

 ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ...

I checked twice and all installation directories are relative. I set quite a lot of variables as sub-folders of ${PROJECT_BINARY_DIR} (which should be relative) such as:

set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
...

does CMAKE/CPACK interpret those variables as absolute paths? If so, is there a way to make CPack working properly with those variables? How do I use CPack when sub-relative path are involved?


Solution

  • Ok I see, the ${PROJECT_BINARY_DIR} is interpreted as an ABSOLUTE path, from there all sub-folder of it will be rejected.

    To avoid this problem I surrounded the install variables in if else blocks, and if it is the case of packaging then a relative folder will be used as follows:

    if(PACK)
       set(INSTALL_DIR bin)
       set(LIB_DIR bin/lib)
       set(EXT_DIR /bin/ext)
       ...
    else(PACK)
       set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
       set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
       set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
       ...
    endif(PACK)
    

    this solves it, but it is really dirty, waiting for a better function on new CPack version.

    ciao