CMakeおよびVisual Studioを使用してテストを実行するパス環境変数を設定する方法

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

質問

CMakeを使用してVisual Studioプロジェクトファイルを生成しています。 PATH環境変数を設定した後にテスト実行可能ファイルを実行して、必要なdllをロードできるようにします。 http://www.mail-archiveの議論に従って試しました。 com/cmake@cmake.org/msg21493.html が機能しません。

この目的でVisual StudioでCMakeを使用しましたか?あなたの経験を共有してください。

また、たとえば、それがPATH変数に割り当てる値を確認するなど、CMakeスクリプトをデバッグする簡単な方法はありません。 CMAKE_VERBOSE_MAKEFILE でCMakeの詳細を設定しても役に立ちません。自分でデバッグするにはどうすればよいですか?

役に立ちましたか?

解決

CMakeからVisual Studioでカスタムプロジェクト設定を設定するには、XMLファイルをテンプレートとして使用し、CMakeから .user ファイルとして機能するように設定できます。
私の仕事では、これを使用してカスタムデバッグパラメータを設定します。

.user ファイルのユーザー設定については、生成された .vcproj ファイルを含むディレクトリを確認します。以下は、使用する UserTemplate.vcproj ファイルのサンプルのスニペットです。

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

この方法により、CMakeから必要な変数を .user ファイルに注入できます。 CMakeでは、適切なCMake変数を設定できます(必要な場合はテンプレートファイルにさらに追加します)。次に、このようなことを行ってファイルを構成します。

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

他のヒント

今、この質問を見つけました。 cmakeファイルをデバッグするには、

を使用します
MESSAGE( STATUS "static text ${variable}" )

テストを実行するためのパスを設定する必要はありませんでした。 CTestを使用していますか?フォローしているリンクがctestで使用されているようです。

これを機能させようとした場合は、最初に set_tests_properties を明示的に使用します。

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

次に、より一般的にします。

関連するCMake機能リクエストレポートは次のとおりです。

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

更新: Visual Studioプロジェクトの設定&quot;カスタム環境変数&quot;に従って解決CMakeでの設定-以下のコメントについてFlorianに感謝します。

新しい VS_USER_PROPS ターゲットプロパティ(バージョン&gt; = 3.8)。

実際の例を次に示します。

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

参照

非常に便利な追加機能を指摘したかっただけです これにより、1つだけではなく複数の環境変数を設定できます(例:PATHのみ) このリンクには https://stackoverflow.com/a/40531167/9253113

があります。

たとえば、PATHの設定に加えて、別の変数OTHERVARを設定したい場合 行を変更する必要があります

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

to

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

シンボル&quot; &amp; #xA; &quot; xmlパーサーにLF文字を導入するよう指示します。したがって、複数の変数定義 LF文字で区切られていれば可能です(CR文字も機能しますが、CRLFの組み合わせは機能しません)

また、&amp; #xA; と次の変数の間にスペースを入れることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top