[CMake] install(TARGETS) does not work with configuration-specific destinations

Alessio masariello+cmake.org at gmail.com
Tue Jun 9 04:31:29 EDT 2015


Ah! Specifying the CONFIGURATIONS argument *before* the DESTINATION ones
works as intended. It would really help if the documentation was changed to
reflect the importance of parameter ordering here.

            install(TARGETS ${target}
                COMPONENT ${component}
                CONFIGURATIONS Release MinSizeRel RelWithDebInfo
                RUNTIME DESTINATION
"${${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE}"
                LIBRARY DESTINATION
"${${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE}")
            install(TARGETS ${target}
                COMPONENT ${component}
                CONFIGURATIONS Debug PDebug
                RUNTIME DESTINATION
"${${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG}"
                LIBRARY DESTINATION
"${${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG}")

On 8 June 2015 at 18:40, Alessio <masariello+cmake.org at gmail.com> wrote:

> I forgot to mention that, by contrast, elsewhere I have the following
> working code. So install(FILES) seems to work fine with multiple calls for
> different configurations.
>
> install(
>     FILES "$<TARGET_FILE_DIR:corelib>/some_file.txt"
>     COMPONENT platform
>     DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE}"
>     CONFIGURATIONS Release RelWithDebInfo MinSizeRel)
> install(
>     FILES "$<TARGET_FILE_DIR:corelib>/some_file.txt"
>     COMPONENT platform
>     DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG}"
>     CONFIGURATIONS Debug PDebug)
>
> On 8 June 2015 at 18:32, Alessio <masariello+cmake.org at gmail.com> wrote:
>
>> Hi
>>
>> The below CMake code is causing my targets to get installed twice in the
>> same tarball when I invoke cpack with the following command line
>>
>>     "${CPACK_COMMAND}" -G ${cpack_gen} --config
>> "${CMAKE_CURRENT_BINARY_DIR}/${package_cfg_file}" -C "$<CONFIGURATION>"
>>
>> The generated cmake_install.cmake in fact contains two fiel(INSTALL)
>> sections for every target like the one at the bottom.
>>
>> Using \${CMAKE_INSTALL_CONFIG_NAME} as suggested in reference (1) does
>> not quite work for me. I would like the installed directory to have a name
>> of my choosing, rather than relying on the name of the configuration.
>>
>> Can this be done at all? Is there a single-call install(TARGETS)
>> signature that gives me what I want?
>>
>> Thank you very much for any light you can shed on this.
>> -alessio
>>
>>
>> THE CMAKE INSTALL CODE WITH THE PROBLEM
>> ---------------------------------------
>>     set(${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE        "release")
>>     set(${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG          "debug")
>>
>>     install(TARGETS ${target}
>>         COMPONENT ${component}
>>         RUNTIME DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE}"
>>         LIBRARY DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_RELEASE}"
>>         CONFIGURATIONS Release MinSizeRel RelWithDebInfo)
>>     install(TARGETS ${target}
>>         COMPONENT ${component}
>>         RUNTIME DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG}"
>>         LIBRARY DESTINATION "${${PROJECT_NAME}_INSTALL_RUNTIME_DEBUG}"
>>         CONFIGURATIONS Debug PDebug)
>>
>>
>>
>> SAMPLE cmake_install.cmake SECTION
>> ----------------------------------
>> if(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL
>> "platform")
>>   if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Dd][Ee][Bb][Uu][Gg])$")
>>     file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/release" TYPE
>> SHARED_LIBRARY FILES "E:/Views/build/testapp/Debug/testapp-d.dll")
>>   elseif("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES
>> "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$")
>>     file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/release" TYPE
>> SHARED_LIBRARY FILES "E:/Views/build/testapp/Release/testapp.dll")
>>   elseif("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES
>> "^([Mm][Ii][Nn][Ss][Ii][Zz][Ee][Rr][Ee][Ll])$")
>>     file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/release" TYPE
>> SHARED_LIBRARY FILES "E:/Views/build/testapp/MinSizeRel/testapp-ms.dll")
>>   elseif("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES
>> "^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$")
>>     file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/release" TYPE
>> SHARED_LIBRARY FILES "E:/Views/build/testapp/RelWithDebInfo/testapp-rd.dll")
>>   elseif("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES
>> "^([Pp][Dd][Ee][Bb][Uu][Gg])$")
>>     file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/release" TYPE
>> SHARED_LIBRARY FILES "E:/Views/build/testapp/PDebug/testapp-pd.dll")
>>   endif()
>> endif()
>>
>>
>> REFERENCES
>> ----------
>> (1) http://www.cmake.org/pipermail/cmake/2010-May/036979.html
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150609/7230861c/attachment.html>


More information about the CMake mailing list