首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CMake抑制链接警告

使用CMake抑制链接警告
EN

Stack Overflow用户
提问于 2016-01-22 14:08:20
回答 3查看 15.4K关注 0票数 13

我知道如何通过执行以下操作(假设我想禁用编译警告C4819)来抑制CMake的编译警告:

代码语言:javascript
运行
复制
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4819")

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

EN

回答 3

Stack Overflow用户

发布于 2016-05-25 16:43:45

试试这个:

代码语言:javascript
运行
复制
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/ignore:4099")

它在我的Visual Studio 2015上工作得很好。

票数 17
EN

Stack Overflow用户

发布于 2019-12-04 01:18:42

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

代码语言:javascript
运行
复制
# 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++项目无关。

票数 2
EN

Stack Overflow用户

发布于 2020-07-18 20:39:42

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

代码语言:javascript
运行
复制
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错误。要解决此问题,请不要在可执行文件级别执行此操作,如下所示:

代码语言:javascript
运行
复制
set_target_properties(my_exe1 PROPERTIES LINK_FLAGS "/ignore:4099")
set_target_properties(my_exe2 PROPERTIES LINK_FLAGS "/ignore:4099")

您可能只想将忽略标志添加到库的接口中一次:

代码语言:javascript
运行
复制
target_link_options(my_lib INTERFACE "/ignore:4099")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34940079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档