Подавить предупреждения о ссылках с помощью CMake

Я знаю, как подавить предупреждения о компиляции с помощью CMake (предположим, я хочу отключить предупреждение о компиляции C4819):

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

Итак, как подавить предупреждения о ссылках с помощью CMake (скажем, LNK4099)?


person herohuyongtao    schedule 22.01.2016    source источник
comment
Что за предупреждение о ссылке? Можете ли вы привести примеры?   -  person usr1234567    schedule 22.01.2016
comment
@ usr1234567 Обновил вопрос.   -  person herohuyongtao    schedule 22.01.2016
comment
Не CMake, но Microsoft предлагает. Вы также можете скомпилировать с / Z7, поэтому pdb не нужно использовать, или удалите параметр компоновщика / DEBUG, если у вас нет файлов .pdb для объектов, которые вы связываете. msdn.microsoft.com/en-us/library/b7whw3f3.aspx   -  person usr1234567    schedule 22.01.2016
comment
@ usr1234567 Это может работать, но я хочу установить его через CMake. Таким образом, после CMake не требуется ручная настройка. Спасибо за вашу помощь все равно.   -  person herohuyongtao    schedule 22.01.2016
comment
@herohuyongtao: Здесь есть обновления? Вы не нашли решение?   -  person jpo38    schedule 24.05.2016
comment
@ jpo38 jpo38 К сожалению, пока нет решения. :(   -  person herohuyongtao    schedule 24.05.2016
comment
@herohuyongtao: А мой? Я удивлен, что ты не принял его...   -  person jpo38    schedule 20.02.2018


Ответы (3)


Попробуй это:

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

У меня он отлично работал с Visual Studio 2015.

person jpo38    schedule 25.05.2016

Другой способ игнорировать предупреждения компоновщика для всех целей в текущей области в 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++. .

person ceztko    schedule 03.12.2019

В случае, если ваша библиотека зависит от какой-то другой библиотеки, в которой нет 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")
person Vladimir Serdyuk    schedule 18.07.2020