Como definir variável de ambiente PATH usando CMake e Visual Studio para executar o teste
-
05-07-2019 - |
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?
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 
OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>
Quando o símbolo "

" 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 

ea próxima variável.