Как избежать предупреждения об имени пакета find_package_handle_standard_argsC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как избежать предупреждения об имени пакета find_package_handle_standard_args

Сообщение Anonymous »

В LibTorch 2.0.1 я мог использовать библиотеку, не устанавливая ее (загрузите библиотеку и установите CMAKE_PREFIX_PATH, чтобы CMake мог найти библиотеку). Используя LibTorch 2.5.1 и CUDA 12.6, мне нужно загрузить nvToolsExt и поместить его по пути: {project}/ Third_party/NVTX/...
Файл: libtorch/ Share/cmake/Caffe2/public/cuda.cmake:

Код: Выделить всё

find_path(nvtx3_dir NAMES nvtx3 PATHS "${PROJECT_SOURCE_DIR}/third_party/NVTX/c/include" NO_DEFAULT_PATH)
find_package_handle_standard_args(nvtx3 DEFAULT_MSG nvtx3_dir)
Итак, имея папку nvtx3, CMake может найти nvtx3, но CMake все равно показывает предупреждающее сообщение:

Код: Выделить всё

CMake Warning (dev) at /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake:438 (message):
The package name passed to `find_package_handle_standard_args` (nvtx3) does
not match the name of the calling package (Caffe2).  This can lead to
-- Found nvtx3: /home/dev/Documents/projects_cpp/Forex/third_party/NVTX/c/include
problems in calling code that expects `find_package` result variables
(e.g., `_FOUND`) to follow a certain pattern.
Call Stack (most recent call first):
/home/dev/Documents/libtorch_2_5_1/share/cmake/Caffe2/public/cuda.cmake:180 (find_package_handle_standard_args)
/home/dev/Documents/libtorch_2_5_1/share/cmake/Caffe2/Caffe2Config.cmake:86 (include)
/home/dev/Documents/libtorch_2_5_1/share/cmake/Torch/TorchConfig.cmake:68 (find_package)
CMakeLists.txt:131 (find_package)
This warning is for project developers.
Если углубиться, то стандартный CMake /usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake.txt генерирует это предупреждение:

Код: Выделить всё

  ``NAME_MISMATCHED``
.. versionadded:: 3.17

Indicate that the ``
`` does not match
``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a
warning, but it may be intentional for usage of the command for components
of a larger package.
...
...
...
if (DEFINED CMAKE_FIND_PACKAGE_NAME
AND NOT FPHSA_NAME_MISMATCHED
AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME)
message(AUTHOR_WARNING
"The package name passed to `find_package_handle_standard_args` "
"(${_NAME}) does not match the name of the calling package "
"(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling "
"code that expects `find_package` result variables (e.g., `_FOUND`) "
"to follow a certain pattern.")
endif ()
  • Вариант 1:
    Из предыдущего блока я обнаружил, что можно изменить переменную в моем CMakeLists.txt, чтобы предупреждение больше не отображалось:

    Код: Выделить всё

    set(FPHSA_NAME_MISMATCHED ON)
    
    Кажется, удалось избежать предупреждения, но я не знаю, может ли это быть проблематично для других библиотек (я больше библиотек не использую).
    Вопрос: я что-то упускаю? Теперь мой проект компилируется правильно, без каких-либо предупреждений.
  • Вариант 2:
    Поскольку я знаю, что включаю nvToolsExt в папку / Third_party/NVTX...
    , я мог бы обновить libtorch/share/cmake/Caffe2/public/cuda. cmake, влияющий на библиотека:
    replace

    Код: Выделить всё

    # nvToolsExt
    find_path(nvtx3_dir NAMES nvtx3 PATHS "${PROJECT_SOURCE_DIR}/third_party/NVTX/c/include" NO_DEFAULT_PATH)
    find_package_handle_standard_args(nvtx3 DEFAULT_MSG nvtx3_dir)
    if(nvtx3_FOUND)
    add_library(torch::nvtx3 INTERFACE IMPORTED)
    target_include_directories(torch::nvtx3 INTERFACE "${nvtx3_dir}")
    target_compile_definitions(torch::nvtx3 INTERFACE TORCH_CUDA_USE_NVTX3)
    else()
    message(WARNING "Cannot find NVTX3, find old NVTX instead")
    add_library(torch::nvtoolsext INTERFACE IMPORTED)
    set_property(TARGET torch::nvtoolsext PROPERTY INTERFACE_LINK_LIBRARIES CUDA::nvToolsExt)
    endif()
    
    от

    Код: Выделить всё

    # nvToolsExt
    add_library(torch::nvtx3 INTERFACE IMPORTED)
    target_include_directories(torch::nvtx3 INTERFACE "${PROJECT_SOURCE_DIR}/third_party/NVTX/c/include")
    target_compile_definitions(torch::nvtx3 INTERFACE TORCH_CUDA_USE_NVTX3)
    
    В этом случае CMake может скомпилироваться без предупреждения.
Действительны ли какие-либо из этих вариантов, или есть лучшее решение, позволяющее избежать предупреждения?
Примечание. Я не использую nvToolsExt, поэтому удаляю скрипт, который добавляет у меня это тоже сработало.

Подробнее здесь: https://stackoverflow.com/questions/792 ... me-warning
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»