Как исправить «Vcpkg/CMake не может определить целевую архитектуру» (Windows10, vcpkg, clion, cmake)

Я хочу использовать эту библиотеку, см.: https://github.com/jtv/libpqxx

Я решил установить этот менеджер библиотек vcpkg см.: https://github.com/microsoft/vcpkg

Я установил для параметра CMake значение «Проекты CMake должны использовать: «-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake».

Это ошибка:

"C:\Program Files\JetBrains\CLion 2019.1.4\bin\cmake\win\bin\cmake.exe"     -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/vcpkg/scripts   /buildsystems/vcpkg.cmake -G "CodeBlocks - MinGW Makefiles" C:\Users  \Vaio\CLionProjects\untitled
CMake Warning at C:/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake:68   (message):
Unable to determine target architecture, continuing without vcpkg.
Call Stack (most recent call first):
cmake-build-debug-mingw/CMakeFiles/3.14.3/CMakeSystem.cmake:6 (include)
CMakeLists.txt:2 (project)

Соответствующий код CMake таков:

if (VCPKG_TARGET_TRIPLET)
elseif (CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
    set(_VCPKG_TARGET_TRIPLET_ARCH x86)
elseif (CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$")
    set(_VCPKG_TARGET_TRIPLET_ARCH x64)
elseif (CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
    set(_VCPKG_TARGET_TRIPLET_ARCH arm)
elseif (CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
    set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
else()
    if (CMAKE_GENERATOR MATCHES "^Visual Studio 14 2015 Win64$")
        set(_VCPKG_TARGET_TRIPLET_ARCH x64)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 14 2015 ARM$")
        set(_VCPKG_TARGET_TRIPLET_ARCH arm)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 14 2015$")
        set(_VCPKG_TARGET_TRIPLET_ARCH x86)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 15 2017 Win64$")
        set(_VCPKG_TARGET_TRIPLET_ARCH x64)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 15 2017 ARM$")
        set(_VCPKG_TARGET_TRIPLET_ARCH arm)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 15 2017$")
        set(_VCPKG_TARGET_TRIPLET_ARCH x86)
    elseif (CMAKE_GENERATOR MATCHES "^Visual Studio 16 2019$")
        if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Xx]86$")
            set(_VCPKG_TARGET_TRIPLET_ARCH x86)
        elseif (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Mm][Dd]64$")
            set(_VCPKG_TARGET_TRIPLET_ARCH x64)
        elseif (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]$")
            set(_VCPKG_TARGET_TRIPLET_ARCH arm)
        elseif (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]64$")
            set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
        else()

        endif ()
    else()
        find_program(_VCPKG_CL cl)
        if (_VCPKG_CL MATCHES "amd64/cl.exe$" OR _VCPKG_CL MATCHES "x64/cl.exe$")
            set(_VCPKG_TARGET_TRIPLET_ARCH x64)
        elseif (_VCPKG_CL MATCHES "arm/cl.exe$")
            set(_VCPKG_TARGET_TRIPLET_ARCH arm)
        elseif (_VCPKG_CL MATCHES "arm64/cl.exe$")
            set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
        elseif (_VCPKG_CL MATCHES "bin/cl.exe$" OR _VCPKG_CL MATCHES "x86/cl.exe$")
            set(_VCPKG_TARGET_TRIPLET_ARCH x86)
        elseif (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
            set(_VCPKG_TARGET_TRIPLET_ARCH x64)
        else()
            if ( _CMAKE_IN_TRY_COMPILE )
                message(STATUS "Unable to determine target architecture, continuing without vcpkg.")
            else()
                message(WARNING "Unable to determine target architecture, continuing without vcpkg.")
            endif ()
            set(VCPKG_TOOLCHAIN ON)
            return()
        endif ()
    endif ()
endif ()

Вот шаг за шагом о том, что я сделал.

  1. Установил Visual Studio 2019.
  2. Установленный GIT
  3. Установленный CMake
  4. Установленный vcpkg см.: https://github.com/microsoft/vcpkg команда установки: .\bootstrap-vcpkg.bat 5 запуск: vcpkg установить libpqxx --triplet x64-windows
  5. run : vcpkg list // чтобы убедиться, что он установлен
  6. запустить: vcpkg интегрировать установить
  7. указанный -DCMAKE-TOOLCHAIN-FILE внутри CLion/CMake

Я использую MinGW/GNU в качестве компилятора

Я что-то пропустил? Или почему он не может найти мою целевую архитектуру? Это мои переменные среды.

Примечание. Все работает внутри Visual Studio 2019.

Как исправить «Vcpkg/CMake не может определить целевую архитектуру» (Windows10, vcpkg, clion, cmake)

Кажется, MinGW+vcpkg официально не поддерживается, см. github.com/Microsoft/vcpkg/issues/3752 для описания, github.com/microsoft/vcpkg/issues/4418#issuecomment-42816815‌​7 для объяснения (вам нужно создать файл набора инструментов mingw)

R2RT 18.07.2019 13:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
4 082
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я добавил -DVCPKG_TARGET_TRIPLET=x64-windows перед -DCMAKE_TOOLCHAIN_FILE, и это сработало.

Теперь мне просто нужно выяснить, как связать включения, но я думаю, это другой вопрос.

ссылка на решение: https://vcpkg.readthedocs.io/en/latest/users/integration/

С CMake вы можете установить VCPKG_TARGET_TRIPLET в строке конфигурации:

cmake ../my/project -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=...

Если вы используете переменную среды VCPKG_DEFAULT_TRIPLET для управления неквалифицированным триплетом в командных строках vcpkg, вы можете использовать по умолчанию VCPKG_TARGET_TRIPLET в CMake, например

Использование переменной среды вместо параметра командной строки:

if (DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
  set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
endif ()

Другие вопросы по теме