كيفية تعيين متغير بيئة المسار باستخدام CMake وVisual Studio لإجراء الاختبار
-
05-07-2019 - |
سؤال
أنا أستخدم 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 
OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>
وأين الرمز "

" يقول محلل XML لإدخال حرف LF. تعريفات متغيرة متعددة بحيث
من الممكن إذا مفصولة بحرف LF (يعمل أيضا الطابع CR لكن ليس الجمع CRLF)
وتلاحظ أيضا أن لا يمكن أن يكون هناك أي مساحة بين 

والمتغير المقبل.