كيفية تعيين متغير بيئة المسار باستخدام 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 مطول مع 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 appropiate (وإضافة المزيد في ملف القالب إذا كنت في حاجة إليها). التالي يمكنك أن تفعل شيئا من هذا القبيل لتكوين الملف.

# 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

وUPDATE: حل وفقا تعيين مشروع 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)

وتلاحظ أيضا أن لا يمكن أن يكون هناك أي مساحة بين &#xA; والمتغير المقبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top