gpt4 book ai didi

c++ - CMake:隐藏 -WShadow 子目标的全局编译标志

转载 作者:行者123 更新时间:2023-11-28 01:37:14 24 4
gpt4 key购买 nike

背景:我为所有子目标(我的项目中存在许多模块)设置了 -WShadow 编译标志。

现在,我正在将第三方库(谷歌的 protobuf 在某些地方有阴影代码)添加到项目树中。这个第三方库将是父项目下的 cmake 子目标。由于这个库在某些地方有阴影代码,全局 -WShadow 标志在我尝试构建时导致编译错误。

问题:有什么办法可以隐藏 protobuf 目标的 -WShadow 标志?我没有找到任何可以为 protobuf 目标的编译选项设置的 no shadow 标志。

最佳答案

当将第三方项目包含到您的 cmake 构建中时,使用 ExternalProject 会很有帮助而不是仅仅将他们的源代码树转储到您自己的源代码树中,然后 add_subdirectory-ing 它。 ExternalProject 将递归调用 cmake 并在其自己的范围内构建第三方项目。您可以根据需要明确地向它传播标志,但它避免了您当前遇到的情况,即您自己的构建范围内的内容“泄漏”到第三方构建系统中并导致意外行为。

本节here关于使用外部库提供了一个合理的例子。

要考虑的另一个选择是使用 find_package 而不是自己编译 Protobuf。这几乎总能减少麻烦。

另一种选择是使用 target_compile_options() 而不是全局 compile_options() 将标志添加到您自己的目标,从而避免将它们泄漏到默认标志列表中.然而,这有点脆弱。

关于c++ - CMake:隐藏 -WShadow 子目标的全局编译标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48761006/

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