首页 > 解决方案 > 将 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++

标签: gcccmakeg++

解决方案


仅将选项应用于 C 源。请参阅cmake 生成器表达式:

target_compile_options(mylib PRIVATE 
     $<$<COMPILE_LANGUAGE:C>:-Wno-implicit-function-declaration>
)

推荐阅读