背景:
我为所有子目标设置了-WShadow
编译标志(我的项目中存在许多模块)。
现在,我正在添加第三方库(Google的protobuf,它在某些地方隐藏了代码)到项目树中。父项目下的第三方库将是 cmake 子目标。由于此库在某些地方隐藏了代码,因此当我尝试构建时,全局-WShadow
标志会导致编译错误。
问题:
有什么方法可以隐藏protobuf目标的-WShadow
标志吗?
我没有找到任何影子标志,我可以为protobuf目标的编译选项设置。
答案 0 :(得分:2)
将第三方项目纳入cmake
版本时,使用ExternalProject会有所帮助,而不仅仅是将源代码树转储到您自己的add_subdirectory
中。 ExternalProject将递归调用cmake并在其自己的范围内构建第三方项目。你可以根据需要明确地将标志传播给它,但是它避免了你现在拥有的场景,你自己的构建范围内的东西"泄漏"进入第三方构建系统并导致不良行为。
关于使用外部库的here部分提供了一个合理的例子。
另一个需要考虑的选择是使用find_package
而不是自己编译Protobuf。这几乎总是不那么麻烦。
另一种选择是使用target_compile_options()
而不是全局compile_options()
将标志添加到您自己的目标中,避免将它们泄漏到默认标记列表中。然而,这有些脆弱。