gpt4 book ai didi

c++ - 在 CMake 中,如何使 `TARGET_LINK_LIBRARIES` 抑制来自第 3 方库代码的警告?

转载 作者:太空狗 更新时间:2023-10-29 23:11:07 25 4
gpt4 key购买 nike

在 CMake 中,您可以让 TARGET_INCLUDE_DIRECTORIES() 添加包含目录作为 system 包含目录(即使用 -isystem)以避免让警告弹出,其根植于第 3 方代码:

TARGET_INCLUDE_DIRECTORIES(mytarget
SYSTEM
${3rdPartyLib_INCLUDE_DIR})

我更喜欢使用 TARGET_LINK_LIBRARIES,它还可以使用来自第 3 方库的包含目录。据我所知,TARGET_LINK_LIBRARIES 不支持使用 SYSTEM 修饰符将这些目录添加为系统包含目录。

我是不是搞错了什么?

有没有办法让:

TARGET_LINK_LIBRARIES(mytarget
${3rdPartyLib_INCLUDE_DIR})

使用 -isystem? (或任何其他方式来抑制来自 3rdPartyLib 的警告)。

最佳答案

我有一个 similar question ,我用自定义函数解决了这个问题:

function(target_link_libraries_system target)
set(libs ${ARGN})
foreach(lib ${libs})
get_target_property(lib_include_dirs ${lib} INTERFACE_INCLUDE_DIRECTORIES)
target_include_directories(${target} SYSTEM PRIVATE ${lib_include_dirs})
target_link_libraries(${target} ${lib})
endforeach(lib)
endfunction(target_link_libraries_system)

我现在可以调用 target_link_libraries_system(myapp lib::lib) 并从目标的属性中读取包含目录。

这现在可以扩展到指定 PUBLIC|PRIVATE|INTERFACE 范围,但因为我在可执行文件上使用它,所以现在这就足够了。

关于c++ - 在 CMake 中,如何使 `TARGET_LINK_LIBRARIES` 抑制来自第 3 方库代码的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51816807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com