使用 CMake 禁止显示链接警告



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

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

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

试试这个:

set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/ignore:4099")

它在Visual Studio 2015中完美地工作。

忽略

CMake 中当前范围内所有目标的链接器警告的另一种方法是通过设置CMAKE_EXE_LINKER_FLAGSCMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS

,如下所示:
# Ignore warnings about missing pdb
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_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++项目无关。

如果你的库依赖于另一个没有 PDB 的库,你可能只想添加一次忽略标志,而不是将其添加到每个可执行文件。请考虑以下事项:

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

您可能只想将忽略标志添加到库的界面一次:

target_link_options(my_lib INTERFACE "/ignore:4099")

最新更新