首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复'Vcpkg/CMake无法确定目标体系结构‘(Windows10,vcpkg,clion,cmake)

如何修复'Vcpkg/CMake无法确定目标体系结构‘(Windows10,vcpkg,clion,cmake)
EN

Stack Overflow用户
提问于 2019-07-18 10:43:24
回答 1查看 4.8K关注 0票数 6

我想使用这个库参见:https://github.com/jtv/libpqxx

我决定安装这个库管理器vcpkg参见:https://github.com/microsoft/vcpkg

我将CMake选项设置为"CMake项目应该使用:CMake“

这是一个错误:

代码语言:javascript
复制
"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代码如下:

代码语言:javascript
复制
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 2019
  2. 已安装GIT
  3. 安装CMake
  4. 安装vcpkg请参阅:https://github.com/microsoft/vcpkg安装命令:.\bootstrap-vcpkg.bat 5运行: vcpkg安装libpqxx -tripletx64-windows
  5. 运行: vcpkg list //以确保已安装
  6. 运行: vcpkg集成安装
  7. 指定-DCMAKE-工具链- CLion/CMake内的文件

我使用MinGW/GNU作为编译器

我错过了什么吗?或者为什么它找不到我的目标架构?这是我的环境变量。

注意:一切都在Visual 2019中工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-18 18:53:54

我在-DVCPKG_TARGET_TRIPLET=x64-windows之前添加了-DCMAKE_TOOLCHAIN_FILE,它起了作用。

解决方案链接:https://vcpkg.readthedocs.io/en/latest/users/integration/

使用CMake,您可以在配置行上设置VCPKG_TARGET_TRIPLET

代码语言:javascript
复制
cmake ../my/project -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=...

如果使用VCPKG_DEFAULT_TRIPLET环境变量来控制vcpkg命令行中的不合格三重奏,则可以在CMake中默认使用VCPKG_TARGET_TRIPLET,如

使用环境变量而不是命令行选项:

代码语言:javascript
复制
if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
  set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "")
endif()
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57092692

复制
相关文章

相似问题

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