侧边栏壁纸
博主头像
wxc博主等级

多接近生活,远离互联网

  • 累计撰写 50 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论
标签搜索

目 录CONTENT

文章目录

cmake修改一些属性的办法,例子windows使用clang链接absl库的-ignore:4221

wxc
wxc
2025-12-11 / 0 评论 / 0 点赞 / 5 阅读 / 221 字

我们阅读vcpkg安装的abseil的absTargets.cmake,会发现类似下面的代码

set_target_properties(absl::nullability PROPERTIES
  INTERFACE_COMPILE_FEATURES "cxx_std_17"
  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
  INTERFACE_LINK_LIBRARIES "absl::config;absl::core_headers;-ignore:4221"
)

INTERFACE_LINK_LIBRARIES 中有-ignore:4221,我们要在clang的情况下移除-ignore:4221以及前面的分号
下面的代码完成了这个操作,修改了某项属性这样就可以在windows下,clang编译器可以连接absl了

if(WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    foreach(target absl::base absl::strings)
        if(TARGET ${target})
            get_target_property(opts ${target} INTERFACE_LINK_LIBRARIES)
            if(opts)
                # opts 是一个列表,把它拼成字符串再替换
                string(REPLACE ";-ignore:4221" "" cleaned_opts "${opts}")
                # 再拆回列表
                separate_arguments(cleaned_opts)
                set_target_properties(${target} PROPERTIES INTERFACE_LINK_LIBRARIES "${cleaned_opts}")
                message(STATUS "Cleaned INTERFACE_LINK_LIBRARIES for ${target}: ${cleaned_opts}")
            endif()
        endif()
    endforeach()
endif()
0

评论区