So stellen Sie die Umgebungsvariable PATH CMake und Visual Studio-Test zu starten
-
05-07-2019 - |
Frage
Ich bin mit CMake Visual Studio Projektdateien zu erzeugen. Ich mag den Test ausführbare Datei nach dem Einstellen der Umgebungsvariable PATH laufen, so dass es in der Lage ist, die erforderliche DLL zu laden. Ich habe versucht, nach der Diskussion unter http: //www.mail-archive. com/cmake@cmake.org/msg21493.html aber es funktioniert nicht.
Haben Sie CMake mit Visual Studio für diesen Zweck verwendet? Bitte teilen Sie Ihre Erfahrungen.
Auch finde ich keine einfache Möglichkeit, meine CMake Skript zu debuggen, zum Beispiel, um zu sehen, welchen Wert es zu der PATH-Variablen zuweist. Einstellen CMake Ausführlich mit CMAKE_VERBOSE_MAKEFILE
hilft nicht. Wie würde ich mich über sie selbst Debuggen?
Lösung
benutzerdefinierte Projekteinstellung in Visual Studio von CMake Zur Einstellung können Sie eine XML-Datei als Vorlage verwenden, die von CMake konfiguriert werden kann als die .user
Datei zu arbeiten.
Bei meiner Arbeit verwenden wir diese benutzerdefinierte Debug-Parameter eingestellt werden.
das Verzeichnis Überprüfen Sie die erzeugten .vcproj
Dateien für die Benutzereinstellungen in den .user
Dateien enthält. Hier ist ein Ausschnitt eines Beispiels UserTemplate.vcproj
Datei, die wir verwenden.
<?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 -->
Auf diese Weise können Sie alle benötigten Variablen von CMake in die .user
Datei injizieren.
In CMake können Sie das sachgemäße CMake Variablen gesetzt (und in der Vorlagendatei hinzufügen, wenn Sie sie benötigen). Als nächstes können Sie so etwas wie dies tun, um die Datei zu konfigurieren.
# 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)
Andere Tipps
Just spotted jetzt diese Frage. Zum Debuggen cmake Dateien, die ich verwende
MESSAGE( STATUS "static text ${variable}" )
Ich habe noch nie den Weg bringen meine Tests erhalten zu laufen. Sind Sie mit CTest? Es sieht aus wie der Link, den Sie folgen mit ctest verwendet.
Wenn ich versuche, diese Arbeit zu bekommen würde ich set_tests_properties
explizit zuerst verwenden.
set_tests_properties(SomeTest PROPERTIES ENVIRONMENT "PATH=c:\somedir;c:\otherdir")
Dann macht es allgemein.
Hier bezieht CMake Feature-Anfrage Bericht:
http://www.kwwidgets.org/Bug/view.php ? id = 8884
UPDATE: Gelöst per Set Visual Studio-Projekt "benutzerdefinierte Umgebungsvariablen" -Einstellung mit CMake -. dank Florian für den Kommentar unten
Sie können alle Optionen geben global mit dem neuen VS_USER_PROPS
Ziel Eigenschaft (Version> = 3.8).
Hier ist ein funktionierendes Beispiel:
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"
)
Referenzen
Ich wollte nur darauf hinweisen, dass eine sehr nützliche Ergänzung das ermöglicht es, mehrere Umgebungsvariablen einzurichten, im Gegensatz zu nur einem (z.B. nur PATH) gegeben in diesem Link https://stackoverflow.com/a/40531167/9253113
Zum Beispiel, wenn zusätzlich zu PATH Einstellung wollen Sie eine weitere Variable othervar einstellen man würde die Linie ändern hat
<LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
<LocalDebuggerEnvironment>PATH=C:\Test 
OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>
Wenn das Symbol "

" erzählt den XML-Parser die LF-Zeichen einzuführen. So mehrere Variablen-Definitionen
wenn getrennt sind möglich durch die LF-Zeichen (auch die CR-Zeichen funktionieren, aber nicht die Kombination CRLF)
Beachten Sie auch, dass es keinen Raum zwischen 

und der nächsten Variable sein kann.