AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77930598
Accepted
StoneThrow
StoneThrow
Asked: 2024-02-03 09:35:31 +0800 CST2024-02-03 09:35:31 +0800 CST 2024-02-03 09:35:31 +0800 CST

O processador do sistema está disponível em CMakePreset.json?

  • 772

O Visual Studio gerou o seguinte CMakePresets.json para mim quando clico em "Gerenciar configurações..." em um projeto CMake:

{
  "version": 3,
  "configurePresets": [
    {
      "name": "windows-base",
      "description": "Target Windows with the Visual Studio development environment.",
      "hidden": true,
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/out/build/${presetName}",
      "installDir": "${sourceDir}/out/install/${presetName}",
      "cacheVariables": {
        "CMAKE_C_COMPILER": "cl.exe",
        "CMAKE_CXX_COMPILER": "cl.exe"
      },
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Windows"
      }
    },
    {
      "name": "x64-debug",
      "displayName": "x64 Debug",
      "description": "Target Windows (64-bit) with the Visual Studio development environment. (Debug)",
      "inherits": "windows-base",
      "architecture": {
        "value": "x64",
        "strategy": "external"
      },
      "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
    },
    {
      "name": "x64-release",
      "displayName": "x64 Release",
      "description": "Target Windows (64-bit) with the Visual Studio development environment. (RelWithDebInfo)",
      "inherits": "x64-debug",
      "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
    },
    {
      "name": "x86-debug",
      "displayName": "x86 Debug",
      "description": "Target Windows (32-bit) with the Visual Studio development environment. (Debug)",
      "inherits": "windows-base",
      "architecture": {
        "value": "x86",
        "strategy": "external"
      },
      "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
    },
    {
      "name": "x86-release",
      "displayName": "x86 Release",
      "description": "Target Windows (32-bit) with the Visual Studio development environment. (RelWithDebInfo)",
      "inherits": "x86-debug",
      "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
    }
  ]
}

Estou interessado no prefixo de instalação cmake, que é definido com o installDircampo. É bom porque o diretório resultante incluirá indiretamente o nome do processador "x64", já que o nome predefinido inclui o processador.

Mas o nome do processador é codificado, ou seja, faz parte da string literal, por exemplo "x64-debug", nos vários nomes predefinidos. É possível referenciar o processador como uma variável (ou expansão de macro) em CMakePresets.json? Ou seja, algo semelhante à CMAKE_SYSTEM_PROCESSORvariável de cache que está disponível em CMakeLists.txt?

cmake
  • 1 1 respostas
  • 21 Views

1 respostas

  • Voted
  1. Best Answer
    Corristo
    2024-02-03T19:52:11+08:002024-02-03T19:52:11+08:00

    Não não é. A lista completa de macros disponíveis pode ser encontrada aqui .

    Atualmente está limitado a

    • ${sourceDir}: Caminho para o diretório de origem do projeto (ou seja, o mesmo que CMAKE_SOURCE_DIR).
    • ${sourceParentDir}: caminho para o diretório pai do diretório de origem do projeto.
    • ${sourceDirName}: O último componente do nome do arquivo ${sourceDir}. Por exemplo, se ${sourceDir}for /path/to/source, isso seria source.
    • ${presetName}: Nome especificado no namecampo do preset.
    • ${generator}: Gerador especificado no generatorcampo do preset. Para predefinições de construção e teste, isso será avaliado para o gerador especificado por configurePreset.
    • ${hostSystemName}:O nome do sistema operacional host. Contém o mesmo valor que CMAKE_HOST_SYSTEM_NAME. Isso é permitido em arquivos predefinidos especificando a versão 3 ou superior.
    • ${fileDir}: Caminho para o diretório que contém o arquivo predefinido que contém a macro. Isso é permitido em arquivos predefinidos especificando a versão 4 ou superior.
    • ${dollar}: Um cifrão literal ($).
    • ${pathListSep}: Caractere nativo para separar listas de caminhos, como :ou ;. Por exemplo, definir PATHcomo /path/to/ninja/bin${pathListSep}$env{PATH}, ${pathListSep}expandirá para o caractere do sistema operacional subjacente usado para concatenação em PATH. Isso é permitido em arquivos predefinidos especificando a versão 5 ou superior.
    • $env{<variable-name>}: Variável de ambiente com nome <variable-name>. O nome da variável não pode ser uma string vazia. Se a variável for definida no environmentcampo, esse valor será usado em vez do valor do ambiente pai. Se a variável de ambiente não estiver definida, isso será avaliado como uma sequência vazia. Observe que, embora os nomes de variáveis ​​de ambiente do Windows não façam distinção entre maiúsculas e minúsculas, os nomes de variáveis ​​dentro de uma predefinição ainda diferenciam maiúsculas de minúsculas. Isto pode levar a resultados inesperados ao usar revestimento inconsistente. Para obter melhores resultados, mantenha consistente a capitalização dos nomes das variáveis ​​de ambiente.
    • $penv{<variable-name>}: semelhante a $env{<variable-name>}, exceto que o valor vem apenas do ambiente pai e nunca do environmentcampo. Isso permite acrescentar ou anexar valores às variáveis ​​de ambiente existentes. Por exemplo, definir PATHcomo /path/to/ninja/bin:$penv{PATH}será anexado /path/to/ninja/binà PATHvariável de ambiente. Isto é necessário porque $env{<variable-name>}não permite referências circulares.
    • $vendor{<macro-name>}: um ponto de extensão para os fornecedores inserirem suas próprias macros. O CMake não será capaz de usar predefinições que possuam uma $vendor{<macro-name>}macro e efetivamente ignora tais predefinições. No entanto, ainda será possível usar outras predefinições do mesmo arquivo. O CMake não faz nenhuma tentativa de interpretar $vendor{<macro-name>}macros. No entanto, para evitar colisões de nomes, os fornecedores de IDE devem prefixar <macro-name>um prefixo de identificador de fornecedor muito curto (de preferência <= 4 caracteres), seguido por um ., seguido pelo nome da macro. Por exemplo, o IDE de exemplo poderia ter $vendor{xide.ideInstallDir}.
    • 1

relate perguntas

  • É necessário ou útil no CMake escrever algo uma vez para geradores de configuração única sem expressões de gerador e novamente para multiconfiguração?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve