gcc - 将 C 特定的 gcc 选项应用于 C/C++ 混合库
问题描述
我有一个库,其中包含一个围绕自动生成的 C 代码的 C++ 包装器,使用 CMake 和 gcc 构建。当我编译它时,我会收到这些我想禁止的警告:
src/ssp/autogenerated.c: In function ‘x1111’:
src/ssp/autogenerated.c:185:1: warning: implicit declaration of function ‘x1111’; did you mean ‘x1110’? [-Wimplicit-function-declaration]
185 | x1111();
| ^~~~~~~~~~
我应该能够使用-Wno-implicit-function-declaration
警告选项来禁止这些警告。我将它添加到我的 CMakeLists.txt 中,如下所示:
file(GLOB SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/ssp/*.c src/ssp/*.cpp)
add_library(mylib SHARED ${SRCS})
target_compile_options(mylib PRIVATE "-Wno-implicit-function-declaration")
但是,那里仍然有一个*.cpp
来源,所以编译给了我:
cc1plus: error: command-line option ‘-Wno-implicit-function-declaration’ is valid for C/ObjC but not for C++ [-Werror]
cc1plus: all warnings being treated as errors
有没有办法抑制这些警告?我在想象它可能只适用-Wno-implicit-function-declaration
于 C 源或被忽略g++
?
解决方案
仅将选项应用于 C 源。请参阅cmake 生成器表达式:
target_compile_options(mylib PRIVATE
$<$<COMPILE_LANGUAGE:C>:-Wno-implicit-function-declaration>
)
推荐阅读
- activemq-artemis - JBoss AMQ / ActiveMQ Artemis:预配置持久订阅者
- mapbox-gl-js - uber/react-map-gl getMap & 暴露的 Mapbox API
- algorithm - 将一个列表转换为另一个列表
- xcode - 文件是为 x86_64 构建的,它不是被链接的架构(arm64):
- background-image - 如果我在页面上有选择语句,我的背景图片不会加载
- apache-kafka - Apache Storm:KafkaSpout 有很多因超时而失败的元组
- java - java中JSONObject里面的JSONobject
- laravel - Laravel 关系 - 多表连接 - 4 个表
- c - C混淆指针算法
- c# - 在 C# 中使用 Azure AD Graph API 将角色添加到已创建的应用程序