我知道如何使用CMake来抑制编译警告(假设我想禁用编译警告C4819
):
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4819")
那么如何使用CMake抑制链接警告(比如LNK4099
)?
答案 0 :(得分:13)
试试这个:
db_datawriter
使用Visual Studio 2015,它非常适合我。
答案 1 :(得分:0)
忽略CMake中当前作用域中所有目标的链接器警告的另一种方法是通过设置CMAKE_EXE_LINKER_FLAGS
,CMAKE_SHARED_LINKER_FLAGS
,CMAKE_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_exe1
和my_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
属性。