fra*_*ans 5 c++ warnings cmake include suppress-warnings
在CMake中,您可以将TARGET_INCLUDE_DIRECTORIES()add include目录作为系统 include目录(即use -isystem),以免弹出根于第三方代码的警告:
TARGET_INCLUDE_DIRECTORIES(mytarget
SYSTEM
${3rdPartyLib_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用TARGET_LINK_LIBRARIES它,这也使来自第三方库的包含目录可用。据我所知,TARGET_LINK_LIBRARIES不支持将SYSTEM修饰符添加为系统包含目录的那些目录。
我做错了吗?
有没有办法使:
TARGET_LINK_LIBRARIES(mytarget
${3rdPartyLib_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)
使用-isystem?(或通过抑制警告的任何其他方式3rdPartyLib)。
我有一个类似的问题,我用自定义函数解决了这个问题:
function(target_link_libraries_system target)
set(libs ${ARGN})
foreach(lib ${libs})
get_target_property(lib_include_dirs ${lib} INTERFACE_INCLUDE_DIRECTORIES)
target_include_directories(${target} SYSTEM PRIVATE ${lib_include_dirs})
target_link_libraries(${target} ${lib})
endforeach(lib)
endfunction(target_link_libraries_system)
Run Code Online (Sandbox Code Playgroud)
我现在可以调用target_link_libraries_system(myapp lib::lib)并从目标的属性中读取包含目录。
现在可以扩展以指定PUBLIC|PRIVATE|INTERFACE范围,但由于我在可执行文件上使用它,所以现在就足够了。
J-C*_*phe -3
我建议您创建一个名为myproject_thirdparty.h如下的标头:
#ifndef myproject_thirdparty_h
#define myproject_thirdparty_h
#include "myprojectMacros.h"
CLANG_PRAGMA_PUSH
CLANG_SUPPRESS_Wfloat_equal
CLANG_PRAGMA_POP
#endif
Run Code Online (Sandbox Code Playgroud)
哪里myprojectMacros.h可以定义有用的宏,例如CLANG_PRAGMA_PUSH, CLANG_PRAGMA_POP, GCC_PRAGMA_PUSH, GCC_PRAGMA_POP, ...
myproject_thirdparty_h然后,在您的项目代码中,您将每次想要使用该库时都包含在内,这将有效地关闭警告,而不会影响项目的其余部分。