Подтвердить что ты не робот

Как установить переменную среды пути, используя CMake и Visual Studio для запуска теста

Я использую CMake для создания файлов проекта Visual Studio. Я хочу запустить тестовый исполняемый файл после установки переменной среды PATH, чтобы он мог загрузить требуемую DLL. Я пробовал на обсуждение http://www.mail-archive.com/[email protected]/msg21493.html, но это не сработало.

Вы использовали CMake с Visual Studio для этой цели? Пожалуйста, поделитесь своим опытом.

Кроме того, я не нашел простой способ отладить мой CMake script, например, чтобы узнать, какое значение он присваивает переменной PATH. Невозможно установить подробный текст в CMake с помощью CMAKE_VERBOSE_MAKEFILE. Как бы я сам отлаживал ее?

4b9b3361

Ответ 1

Для настройки пользовательских настроек проекта в Visual Studio из CMake вы можете использовать XML файл в качестве шаблона, который можно настроить из CMake для работы в качестве файла .user.
В моей работе мы используем это для установки пользовательских параметров отладки.

Проверьте каталог, содержащий сгенерированные файлы .vcxproj для пользовательских настроек в файлах .user. Вот фрагмент примера файла UserTemplate.vcxproj.user который мы используем.

    <?xml version="1.0" encoding="Windows-1252"?>
      <VisualStudioUserFile
        ProjectType="Visual C++"
        Version="9.00"
        ShowAllFiles="false"
        >
        <Configurations>
            <Configuration
                Name="Debug|@[email protected]"
                >
                <DebugSettings
                    Command="@[email protected]"
                    WorkingDirectory="@[email protected]"
                    CommandArguments="@[email protected]"
                    Attach="false"
                    DebuggerType="3"
                    Remote="1"
                    RemoteMachine="@[email protected]"
                                <!-- More settings removed for snippet -->
                />
            </Configuration>
                <!-- Rest of Configurations -->

Другой пример UserTemplate.vcxproj.user для установки переменной PATH:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
        <LocalDebuggerEnvironment>PATH=..\Your_path;%PATH%".</LocalDebuggerEnvironment>
        <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
      </PropertyGroup>
    </Project>

Установив файл UserTemplate.vcxproj.user рядом с файлом CMakeLists.txt, вы можете добавить любые необходимые переменные из CMake в файл .vcxproj.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}.vcxproj.${SYSTEM_NAME}.${USER_NAME}.user)
    SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
    CONFIGURE_FILE(UserTemplate.vcxproj.user${USER_FILE} @ONLY)

Если вам не нужны система и имя пользователя, вам будет достаточно следующей конфигурации.

    # Configure the template file
    SET(USER_FILE ${_projectName}.vcxproj.user)
    SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
    CONFIGURE_FILE(UserTemplate.vcxproj.user ${USER_FILE} @ONLY)

Ответ 2

Просто заметил этот вопрос сейчас. Для отладки файлов cmake я использую

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

Мне никогда не приходилось устанавливать путь, чтобы мои тесты запускались. Вы используете CTest? Похоже, что ссылка, по которой вы переходите, используется ctest.

Если бы я пытался заставить это работать, я бы set_tests_properties явно использовал set_tests_properties.

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

Тогда сделайте это более общим.

Ответ 4

Вы можете предоставить любые параметры во всем мире с новым VS_USER_PROPS целевым свойством (версия >= 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"
) 

Ссылки

Ответ 5

Просто хотел бы отметить, что по этой ссылке дано очень полезное дополнение, которое позволяет вам настроить несколько переменных среды, а не только одну (например, только PATH) fooobar.com/info/3082839/...

Например, если в дополнение к установке PATH вы хотите установить другую переменную OTHERVAR, нужно будет изменить строку

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

в

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

Где символ " &#xA; " говорит парсеру xml ввести символ LF. Таким образом, возможны множественные определения переменных, если они разделены символом LF (также работает символ CR, но НЕ комбинация CRLF)

Также обратите внимание, что между &#xA; не может быть пробела. и следующая переменная.