Como definir variável de ambiente PATH usando CMake e Visual Studio para executar o teste

StackOverflow https://stackoverflow.com/questions/1005901

Pergunta

Eu estou usando CMake para gerar arquivos de projeto do Visual Studio. Eu quero correr o executável teste depois de definir a variável de ambiente PATH para que ele seja capaz de carregar a DLL exigida. Tentei conforme a discussão em http: //www.mail-archive. com/cmake@cmake.org/msg21493.html mas ele não funciona.

Você usou CMake com o Visual Studio para esta finalidade? Por favor, compartilhe suas experiências.

Além disso, eu não encontrar nenhuma maneira fácil de depurar o meu script CMake, por exemplo, para ver qual o valor que atribui à variável PATH. Definir CMake detalhado com CMAKE_VERBOSE_MAKEFILE não ajuda. Como eu iria sobre a depuração-lo eu mesmo?

Foi útil?

Solução

Para definir configuração de projeto personalizado no Visual Studio de CMake você pode usar um arquivo XML como um modelo que pode ser configurado a partir CMake ao trabalho que o arquivo .user.
No meu trabalho usamos isso para definir parâmetros de depuração personalizado.

Verifique o diretório que contém os arquivos .vcproj gerados para as configurações do usuário nos arquivos .user. Aqui está um trecho de um arquivo de exemplo UserTemplate.vcproj usamos.

<?xml version="1.0" encoding="Windows-1252"?>
  <VisualStudioUserFile
    ProjectType="Visual C++"
    Version="9.00"
    ShowAllFiles="false"
    >
    <Configurations>
        <Configuration
            Name="Debug|@USERFILE_PLATFORM@"
            >
            <DebugSettings
                Command="@USERFILE_COMMAND_DEBUG@"
                WorkingDirectory="@USERFILE_WORKING_DIRECTORY_DEBUG@"
                CommandArguments="@USERFILE_COMMAND_ARGUMENTS_DEBUG@"
                Attach="false"
                DebuggerType="3"
                Remote="1"
                RemoteMachine="@USERFILE_REMOTE_MACHINE_DEBUG@"
                            <!-- More settings removed for snippet -->
            />
        </Configuration>
            <!-- Rest of Configurations -->

Desta forma, você pode injetar quaisquer variáveis ??necessárias de CMake no arquivo .user. Em CMake você pode definir as variáveis ??CEfectue appropiate (e adicionar mais no arquivo de modelo se você precisar deles). Em seguida, você pode fazer algo parecido com isso para configurar o arquivo.

# Find user and system name
SET(SYSTEM_NAME $ENV{USERDOMAIN} CACHE STRING SystemName)
SET(USER_NAME $ENV{USERNAME} CACHE STRING UserName)

# Configure the template file
SET(USER_FILE ${_projectName}.vcproj.${SYSTEM_NAME}.${USER_NAME}.user)
SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
CONFIGURE_FILE(UserTemplate.user ${USER_FILE} @ONLY)

Outras dicas

Apenas manchou esta pergunta agora. Para arquivos cmake depuração eu uso

MESSAGE( STATUS "static text ${variable}" )

Eu nunca tive que definir o caminho de obter os meus testes a serem executados. Você está usando CTest? Parece que o link que você está seguindo é usado com ctest.

Se eu estava tentando chegar a este trabalho que eu usaria set_tests_properties explicitamente pela primeira vez.

set_tests_properties(SomeTest PROPERTIES ENVIRONMENT "PATH=c:\somedir;c:\otherdir")

Em seguida, torná-lo mais geral.

Aqui está relacionada CMake relatório pedido de recurso:

http://www.kwwidgets.org/Bug/view.php ? id = 8884

UPDATE: Resolvido como por Set projeto Visual Studio "variáveis ??de ambiente personalizado" configuração com CMake -. graças a Florian para o comentário abaixo

Você pode dar qualquer opção globalmente com a nova VS_USER_PROPS alvo alojamento (versão> = 3.8).

Aqui está um exemplo de trabalho:

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(SetEnvPathTest)

file(WRITE main.cpp [=[
// http://en.cppreference.com/w/cpp/utility/program/getenv
#include <iostream>
#include <cstdlib>

int main()
{
    if(const char* env_p = std::getenv("PATH"))
        std::cout << "Your PATH is: " << env_p << '\n';
}
]=])
add_executable(${PROJECT_NAME} main.cpp)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.Cpp.user.props" [=[
<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
  </PropertyGroup>
</Project>
]=])

set_target_properties(
    ${PROJECT_NAME}
    PROPERTIES
        VS_USER_PROPS "${PROJECT_NAME}.Cpp.user.props"
) 

Referências

Apenas queria salientar que uma adição muito útil que lhe permite configurar várias variáveis ??de ambiente em oposição a apenas uma (por exemplo, apenas a PATH) é dada em neste link https://stackoverflow.com/a/40531167/9253113

Por exemplo, se além de definir o caminho que você queria definir outro outra_var variável um teria que modificar a linha

<LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>

para

<LocalDebuggerEnvironment>PATH=C:\Test &#xA;OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>

Quando o símbolo "&#xA;" diz ao analisador xml para introduzir o personagem LF. Então várias definições de variáveis são possíveis se separado pelo caractere LF (também as obras de caracteres CR, mas não a combinação CRLF)

Note também que não pode haver nenhum espaço entre &#xA; ea próxima variável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top