c/c++语言开发共享使用CMake打开链接器标志

当使用CMake生成VS2010目标时,我希望/ LTCG标志打开(如果可能的话,仅用于发布+ releasewithdebinfo,但是如果它打开调试则可以)。 如何修改链接器标志? add_definitions()不起作用,因为它只修改编译器标志。 是的,我把它包裹在if(MSVC)中。

如何修改链接器标志?

    您可以使用#pragma comment(链接器,…)修改MSC中的链接器标志

    但是,如果您想在使用cmake的构建过程中执行此操作,请输入以下名称:

    (感谢Cmake.org )。

    和STATIC_LIBRARY_FLAGS

    对于静态库

    使用“ucm”库似乎是一个很好的方法。 我推出了一个简单的宏,它帮助我在CMake中统一管理所有配置的链接器标志,同时还允许编译器特定的使用。 (只需设置变量就可以在多次配置CMake时导致标记堆叠。)

     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() 

    然后通过创建特定于编译器的宏来检查其他编译器,该宏检查正在使用的编译器。 这使得在错误的编译器上设置正确的标志变得更加困难。

     if(CMAKE_COMPILER_IS_GNUCXX) 

     if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) 

    用于添加链接器标志 – 以下4个CMake变量:

     CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS 

    可以使用ucm_add_linker_flags宏来轻松操作不同的配置(调试,释放…)

    链接器标志也可以在每个目标的基础上进行管理 – 通过使用target_link_libraries并在其前面传递带有-标志(但不包含-l – 将被视为链接库而不是链接标志)。

    您可以使用LINK_FLAGS属性为特定目标添加链接器标志:

     set_property(TARGET ${target} APPEND_STRING PROPERTY LINK_FLAGS " ${flag}") 

    (注意我在标志之前添加了一个空格,因为我正在使用APPEND_STRING

    需要了解更多c/c++开发分享使用CMake打开链接器标志,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享使用CMake打开链接器标志相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980065.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐