问题描述
我正在研究包含 C 和 C++ 源代码的 Node.js 本机模块。 node-gyp
用于构建模块。
因为我只希望在 C 代码中出现一个警告上升错误,所以我在 binding.gyp
中使用了以下几行:
"cflags!": [ "-Werror"],"cflags": [ "-Werror=implicit-function-declaration" ],
这在编译 C 代码时工作正常,但在每个 C++ 源文件上产生以下警告:
cc1plus: warning: ‘-Werror=’ argument ‘-Werror=implicit-function-declaration’ is not valid for C++
我找到了这个答案 - Apply C-specific gcc options to C/C++ mixed library - 它在使用“纯”CMake 时解决了同样的问题。不幸的是,我没有找到是否可能以及如何将此条件正确添加到 GYP 配置文件中 - 也许使用变量和条件?请让我知道它是否可以解决。谢谢。
解决方法
我在我的问题中找到了问题的解决方案,我发布了一个答案,以防万一有人遇到同样的问题。
binding.gyp
中的原始错误配置如下:
"cflags!": [ "-Werror"],"cflags": [ "-Werror=implicit-function-declaration" ],
符合我的要求的正确配置是:
"cflags!": [ "-Werror"],"cflags_c": [ "-Werror=implicit-function-declaration" ],
为了避免 C++ 中的警告,我们只需要将 required 标志添加到 C 特殊标志 cflag_c
。
在我的项目中研究 my_module.target.mk
文件时获得了解决方案,其中包含以下评论(感谢开发人员!):
# Flags passed to all source files.
CFLAGS_Release := \
# Flags passed to only C files.
CFLAGS_C_Release := \
# Flags passed to only C++ files.
CFLAGS_CC_Release := \
因此看起来很明显,但我仍然没有在 CMake 和 GYP 文档中找到关于这些标志的明确参考。我要求如果您知道它们或您会找到它们,请向我提供相应的链接 - 我应该知道我在搜索文档时的错误在哪里,以便将来避免它们。