How to print all the properties of a target in cmake?

后端 未结 3 1239
天涯浪人
天涯浪人 2020-12-13 00:22

With the following cmake scrpt:

get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
    message(STATUS \"${_variableName}=         


        
3条回答
  •  情深已故
    2020-12-13 00:44

    Improved @AlwaysTraining's and @PaulMolodowitch's answers.
    Solves problem with INTERFACE_LIBRARY described in kyb's comment

    Functionally my implementation does at most the same as @PaulMolodowitch's implementation. But it is more laconic.

    ## https://stackoverflow.com/questions/32183975/how-to-print-all-the-properties-of-a-target-in-cmake/56738858#56738858
    ## https://stackoverflow.com/a/56738858/3743145
    
    ## Get all properties that cmake supports
    execute_process(COMMAND cmake --help-property-list OUTPUT_VARIABLE CMAKE_PROPERTY_LIST)
    ## Convert command output into a CMake list
    STRING(REGEX REPLACE ";" "\\\\;" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}")
    STRING(REGEX REPLACE "\n" ";" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}")
    
    list(REMOVE_DUPLICATES CMAKE_PROPERTY_LIST)
    
    function(print_target_properties tgt)
        if(NOT TARGET ${tgt})
          message("There is no target named '${tgt}'")
          return()
        endif()
    
        foreach (prop ${CMAKE_PROPERTY_LIST})
            string(REPLACE "" "${CMAKE_BUILD_TYPE}" prop ${prop})
            get_target_property(propval ${tgt} ${prop})
            if (propval)
                get_target_property(propval ${tgt} ${prop})
                message ("${tgt} ${prop} = ${propval}")
            endif()
        endforeach(prop)
    endfunction(print_target_properties)
    

提交回复
热议问题