0

我正在开发包含 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++

我找到了这个答案——将特定于 C 的 gcc 选项应用于 C/C++ 混合库——它在使用“纯”CMake 时解决了同样的问题。不幸的是,我没有找到是否可能以及如何将此条件正确添加到 GYP 配置文件中 - 也许使用变量和条件?请让我知道它是否可以解决。谢谢。

4

1 回答 1

0

我在我的问题中找到了问题的解决方案,我发布了一个答案,以防万一有人遇到同样的问题。

原来不正确的配置binding.gyp如下:

"cflags!": [ "-Werror"],
"cflags": [ "-Werror=implicit-function-declaration" ],

我的要求的正确配置是:

"cflags!": [ "-Werror"],
"cflags_c": [ "-Werror=implicit-function-declaration" ],

为了避免 C++ 中的警告,我们只需将 required 标志添加到 C-special flags 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 文档中找到关于这些标志的明确参考。如果您知道它们,或者您会找到它们,我要求请向我提供相应的链接 - 我应该知道我在搜索文档时的错误在哪里,以便将来避免它们。

于 2021-07-07T09:06:37.243 回答