Come impostare la variabile di ambiente del percorso utilizzando CMake e Visual Studio per eseguire il test

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

Domanda

Sto usando CMake per generare file di progetto di Visual Studio. Voglio eseguire il test eseguibile dopo aver impostato la variabile d'ambiente PATH in modo che sia in grado di caricare la dll richiesta. Ho provato come da discussione in http: //www.mail-archive. com/cmake@cmake.org/msg21493.html ma non funziona.

Hai usato CMake con Visual Studio per questo scopo? Per favore, condividi le tue esperienze.

Inoltre, non trovo un modo semplice per eseguire il debug del mio script CMake, ad esempio per vedere quale valore assegna alla variabile PATH. L'impostazione di CMake verbose con CMAKE_VERBOSE_MAKEFILE non aiuta. Come potrei fare il debug da solo?

È stato utile?

Soluzione

Per configurare un'impostazione di progetto personalizzata in Visual Studio da CMake è possibile utilizzare un file XML come modello che può essere configurato da CMake per funzionare come file .user .
Nel mio lavoro lo usiamo per impostare parametri di debug personalizzati.

Controlla la directory che contiene i file .vcproj generati per le impostazioni utente nei file .user . Ecco uno snippet di un file UserTemplate.vcproj di esempio che utilizziamo.

<?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 -->

In questo modo è possibile iniettare tutte le variabili necessarie da CMake nel file .user . In CMake è possibile impostare le variabili CMake appropriate (e aggiungerne altre nel file modello se necessario). Successivamente puoi fare qualcosa del genere per configurare il file.

# 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)

Altri suggerimenti

Ho appena scoperto questa domanda ora. Per eseguire il debug dei file cmake che uso

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

Non ho mai dovuto impostare il percorso per eseguire i miei test. Stai usando CTest? Sembra che il link che stai seguendo sia usato con ctest.

Se stavo cercando di far funzionare tutto ciò, avrei usato prima set_tests_properties esplicitamente.

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

Quindi rendilo più generale.

Ecco il rapporto di richiesta della funzione CMake correlato:

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

AGGIORNAMENTO: risolto secondo Imposta progetto Visual Studio " variabili di ambiente personalizzate " ambientazione con CMake - grazie a Florian per il commento qui sotto.

Puoi offrire qualsiasi opzione a livello globale con il nuovo VS_USER_PROPS proprietà target (versione > = 3.8).

Ecco un esempio funzionante:

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"
) 

Riferimenti

Volevo solo sottolineare che un'aggiunta molto utile che consente di impostare più variabili di ambiente anziché una sola (ad es. solo PERCORSO) è riportato in questo link https://stackoverflow.com/a/40531167/9253113

Ad esempio, se oltre all'impostazione PATH si desidera impostare un'altra variabile OTHERVAR si dovrebbe modificare la riga

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

a

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

Dove il simbolo " & amp; #xA; " dice al parser xml di introdurre il carattere LF. Quindi più definizioni di variabili sono possibili se separati dal carattere LF (anche il carattere CR funziona ma NON la combinazione CRLF)

Nota anche che NON può esserci spazio tra & amp; #xA; e la variabile successiva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top