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

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

Вопрос

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

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

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

Это было полезно?

Решение

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

Проверьте каталог, содержащий сгенерированные файлы .vcproj для пользовательских настроек в файлах .user . Вот фрагмент примера файла 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 " пользовательские переменные среды " настройка с помощью CMake - спасибо Флориану за комментарий ниже.

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

Ссылки

Просто хотел отметить, что очень полезное дополнение это позволяет вам установить несколько переменных среды, а не только одну (например, только PATH) приводится по этой ссылке https://stackoverflow.com/a/40531167/9253113

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

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

до

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top