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?

War es hilfreich?

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 &#xA;OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>

Wenn das Symbol "&#xA;" 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 &#xA; und der nächsten Variable sein kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top