Как установить переменную среды Path с помощью CMake и Visual Studio для запуска теста - PullRequest
42 голосов
/ 17 июня 2009

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

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

Кроме того, я не нашел простого способа отладки своего сценария CMake, например, чтобы посмотреть, какое значение он присваивает переменной PATH. Установка подробного CMake с CMAKE_VERBOSE_MAKEFILE не помогает. Как бы я пошел отладить его сам?

Ответы [ 5 ]

42 голосов
/ 20 августа 2009

Для настройки пользовательских настроек проекта в 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)
10 голосов
/ 03 июля 2009

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

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

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

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

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

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

4 голосов
/ 29 сентября 2009

Вот отчет о запросе функции CMake:

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

ОБНОВЛЕНИЕ: Решено согласно Установить настройку "пользовательских переменных среды" проекта Visual Studio с помощью CMake - спасибо Florian за комментарий ниже.

3 голосов
/ 25 ноября 2017

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

Ссылки

1 голос
/ 31 октября 2018

Просто хотел отметить, что очень полезное дополнение это позволяет вам установить несколько переменных среды, а не только одну (например, только 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)

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

...