- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我为所有子目标(我的项目中存在许多模块)设置了 -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/
在弄乱一些代码后,我意识到我需要编译器标志 -Wshadow,因此我决定也在 Codeblocks 中使用它,但它不起作用,并且我不明白为什么。 以下代码: #include int main(vo
不能低估 C++ 中隐藏警告的重要性,但是,在某些看起来(对我来说)完全有效的代码上有一个隐藏警告。 struct A{ int a; A(int a) : a(a){} }; 在这种
在一个大型项目中,我最近发现了一个隐藏成员变量的问题。为了避免将来出现这些问题,我想引入 -Wshadow 来显示这些问题。然而,大多数构造函数看起来像这样: struct Foo{ int ba
由于编译器可以识别的纯粹愚蠢,我再次浪费了一些时间。这是有问题的源代码: class f { static int mVar; int g(int x) { int mVar=3; r
我看到另一篇关于 GCC -Wshadow 过于严格的帖子。我的问题正好相反。 我重新审视了我编写的一些代码并注意到 -Wshadow 没有像我预期的那样工作: void free(double* x
伙计们,我真的很喜欢 -Wshadow 选项,因为它有助于发现一些可能有问题的代码片段。我想在一个非常大的项目中使用它,但我不能,因为它太严格了。例如,它会针对以下情况发出警告: struct Foo
在以下示例中: class A { public: int len(); void setLen(int len) { len_ = len; } // warning at th
背景:我为所有子目标(我的项目中存在许多模块)设置了 -WShadow 编译标志。 现在,我正在将第三方库(谷歌的 protobuf 在某些地方有阴影代码)添加到项目树中。这个第三方库将是父项目下的
在 GCC 7.3 和 8.2 上使用 -Wshadow=global 进行编译时,编译器会警告以下代码片段有阴影。 constexpr int A = 0; class Bar { public:
更新:gcc 有效,但 clang 无效 用 C++17 编译 GCC/Clang -Wshadow 会在阴影局部变量发生时发出警告,但对于结构化绑定(bind),此标志不起作用。这种情况如何暴露警告
-Wshadow将“每当局部变量遮蔽另一个局部变量时发出警告。”。 Visual C++ (2008) 中是否有等价物?我试过/W4 但它没有接受它。我也试过Cppcheck但那也没有看到。 例如如果
我使用 android studio 创建了一个 ndk 项目,一切顺利,我可以毫无问题地在模拟器上启动我的应用程序。但是当我将 Oboe 库添加到我的项目时,当我尝试启动或构建我的应用程序时会出现此
我是一名优秀的程序员,十分优秀!