C++:如何在CMake中禁止旧式转换警告

3

我正在与一个大量使用老式转换(数千个)的旧代码库进行接口。我试图在Cmake中禁用这些警告,但它并没有起作用(我不想看到成千上万的警告,也不关心修复根本原因)。为此,我认为应该设置-Wno-old-style-cast。我尝试在CMakeLists.txt文件的三个不同位置进行设置,但无济于事。以下是完整文件:

set(example "train")
project(${example} CXX)

# Python
message(STATUS "We are going to force it to use Python 3. If you change this, you will need to remove the build folder and reload the cmake project.")
find_package(PythonLibs 3 EXACT)
find_package(PythonInterp 3 EXACT)

# PCL library
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-old-style-cast")
set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-old-style-cast")

add_executable(${example} src/${example}.cpp)
target_compile_options(${example} PUBLIC -Wno-old-style-cast)
target_link_libraries(${example} ${Boost_LIBRARIES} ${PCL_LIBRARIES} ${PYTHON_LIBRARIES})
target_include_directories(${example} PRIVATE include/ ${PYTHON_INCLUDE_DIRS})

我正在使用GCC 7.4.0在Ubuntu 18.04上进行编译。我看到成千上万个类似于此的错误:

/usr/include/python3.7m/object.h:118:49: warning: use of old-style cast [-Wold-style-cast]
 #define Py_TYPE(ob)             (((PyObject*)(ob))->ob_type)

编辑:

make VERBOSE=1 的输出结果如下:

/usr/bin/c++  -DDISABLE_LIBUSB_1_0 -DDISABLE_PCAP -DDISABLE_PNG -DPCL_NO_PRECOMPILE=0 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -Dqh_QHpointer -DvtkRenderingContext2D_AUTOINIT="1(vtkRenderingContextOpenGL2)" -DvtkRenderingCore_AUTOINIT="3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)" -isystem /usr/include/vtk-7.1 -isystem /usr/include/freetype2 -isystem /usr/include/x86_64-linux-gnu -isystem /usr/local/include/pcl-1.9 -isystem /usr/include/eigen3 -I/home/bob/Desktop/choc/include -I/usr/include/python3.7m -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++  -Wno-old-style-cast    -Wno-old-style-cast -march=native -msse4.2 -mfpmath=sse -fPIC -std=gnu++14 -o CMakeFiles/train.dir/src/train.cpp.o -c /home/bob/Desktop/choc/src/train.cpp

1
CMake 全局变量被称为 CMAKE_CXX_FLAGS - Botje
3
我认为你想要禁用警告,而不是转换。 - molbdnilo
等一下。那没有解决问题。让我重新表述问题,以防有些混淆。 - bremen_matt
2
使用 VERBOSE=1 选项运行 make 命令,并检查在出现警告时是否实际使用-Wno-old-style-cast 选项。 - Tsyvarev
1
这些强制转换是在你的项目代码中还是在你正在使用的“外部”库中?如果是后者,你可以在执行target_include_directoriestarget_link_libraries时添加SYSTEM,这将自动抑制由该目标定义的包含目录中头文件中的所有警告。 - rubenvb
显示剩余5条评论
1个回答

0

一些 PCL 库使用诊断预处理指令设置 -Wold-style-cast 警告。因此,无论您在 CMake 配置中设置了什么,这些警告都应该出现。在包含 PCL 标头之前使用预处理指令禁用它可以解决我的问题。

#include <pcl/surface/concave_hull.h>

#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wold-style-cast"
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接