Turning on linker flags with CMake

后端 未结 5 1258
萌比男神i
萌比男神i 2020-12-30 00:37

When generating VS2010 targets with CMake, I would like the /LTCG flag turned on (only for release + releasewithdebinfo if possible, but its okay if its on for debug builds)

5条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-30 01:23

    The use of the "ucm" library seems like a nice approach. I rolled a simple macro that help me uniformly manage linker flags in CMake for all configurations while also allowing compiler-specific use. (Just setting the variable can cause flags to stack up when CMake is configured multiple times.)

    macro(ADD_MSVC_LINKER_FLAG flag)
        if(MSVC)
        if(${CMAKE_EXE_LINKER_FLAGS} MATCHES "(${flag}.*)")
            # message("skipping linker flags")
        else()
            set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}" CACHE STRING "Linker Flags for Release Builds" FORCE)
        endif()
    
        if(${CMAKE_SHARED_LINKER_FLAGS} MATCHES "(${flag}.*)")
            # message("skipping linker flags")
        else()
            set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${flag}" CACHE STRING "Linker Flags for Release Builds" FORCE)
        endif()
    
        if(${CMAKE_STATIC_LINKER_FLAGS} MATCHES "(${flag}.*)")
            # message("skipping linker flags")
        else()
            set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} ${flag}" CACHE STRING "Linker Flags for Release Builds" FORCE)
        endif()
    
        if(${CMAKE_MODULE_LINKER_FLAGS} MATCHES "(${flag}.*)")
            # message("skipping linker flags")
        else()
            set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${flag}" CACHE STRING "Linker Flags for Release Builds" FORCE)
        endif()
        endif()
    endmacro()
    

    Other compilers are then supported by creating a compiler-specific macro that checks for the compiler to be in use. That makes it harder to set the right flag on the wrong compiler.

    if(CMAKE_COMPILER_IS_GNUCXX)
    

    and

    if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
    

提交回复
热议问题