使用CMake抑制链接警告

时间:2016-01-22 06:08:20

标签: c++ cmake warnings suppress-warnings

我知道如何使用CMake来抑制编译警告(假设我想禁用编译警告C4819):

set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4819")

那么如何使用CMake抑制链接警告(比如LNK4099)?

4 个答案:

答案 0 :(得分:13)

试试这个:

db_datawriter

使用Visual Studio 2015,它非常适合我。

答案 1 :(得分:0)

忽略CMake中当前作用域中所有目标的链接器警告的另一种方法是通过设置CMAKE_EXE_LINKER_FLAGSCMAKE_SHARED_LINKER_FLAGSCMAKE_STATIC_LINKER_FLAGS,如下所示:

# Ignore warnings about missing pdb
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /ignore:4099")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /ignore:4099")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4099")

它也存在CMAKE_MODULE_LINKER_FLAGS,但似乎与C ++项目无关。

答案 2 :(得分:0)

如果您的库依赖于另一个没有PDB的库,则您可能只想添加一次ignore标志,而不是将其添加到每个可执行文件中。请考虑以下内容:

add_library(my_lib my_lib.cpp)

find_library(EXT_LIBRARY no_pdb.lib REQUIRED)
target_link_libraries(my_lib PUBLIC ${EXT_LIBRARY})

add_executable(my_exe1 "src/exe1.cpp")
target_link_libraries(my_exe1 PUBLIC my_lib)

add_executable(my_exe2 "src/exe2.cpp")
target_link_libraries(my_exe2 PUBLIC my_lib)

因此,现在my_exe1my_exe2都导致LNK4099错误。要解决此问题,而不是在可执行文件级别执行以下操作:

set_target_properties(my_exe1 PROPERTIES LINK_FLAGS "/ignore:4099")
set_target_properties(my_exe2 PROPERTIES LINK_FLAGS "/ignore:4099")

您可能只想向库的接口添加一次ignore标志:

target_link_options(my_lib INTERFACE "/ignore:4099")

答案 3 :(得分:-1)

答案是如此明显,我甚至怀疑我的问题是否正确。无论如何,你需要的是subscriptions/insert属性。