将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>
)

最新更新