我知道如何通过执行以下操作(假设我想禁用编译警告C4819
)来抑制CMake的编译警告:
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4819")
那么如何使用CMake (比如LNK4099
)来抑制链接警告呢?
发布于 2016-05-25 16:43:45
试试这个:
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/ignore:4099")
它在我的Visual Studio 2015上工作得很好。
发布于 2019-12-04 01:18:42
忽略CMake中当前作用域中所有目标的链接器警告的另一种方法是设置CMAKE_EXE_LINKER_FLAGS
、CMAKE_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++项目无关。
发布于 2020-07-18 20:39:42
如果您的库依赖于另一个没有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_exe1
和my_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")
https://stackoverflow.com/questions/34940079
复制相似问题