আমি জানি যে কীভাবে CMAKE ব্যবহার করে একটি সাধারণ মেশিন প্রশস্ত পরিবেশের পরিবর্তনশীল পুনরুদ্ধার করতে পারি
$ENV{EnvironmentVariableName}
তবে আমি কোনও ব্যবহারকারী নির্দিষ্ট পরিবেশের পরিবর্তনশীলটি পুনরুদ্ধার করতে পারি না। এটা কি সম্ভব এবং কিভাবে?
আমি জানি যে কীভাবে CMAKE ব্যবহার করে একটি সাধারণ মেশিন প্রশস্ত পরিবেশের পরিবর্তনশীল পুনরুদ্ধার করতে পারি
$ENV{EnvironmentVariableName}
তবে আমি কোনও ব্যবহারকারী নির্দিষ্ট পরিবেশের পরিবর্তনশীলটি পুনরুদ্ধার করতে পারি না। এটা কি সম্ভব এবং কিভাবে?
উত্তর:
আপনি চক্রের অনুরোধের সাথে লাইনে একটি ভেরিয়েবল পাস করতে পারেন:
FOO=1 cmake
বা বেসে ভেরিয়েবল রফতানি করে:
export FOO=1
তারপরে আপনি এটিকে ব্যবহার করে একটি চতুর স্ক্রিপ্টে তুলতে পারেন:
$ENV{FOO}
আপনি অনুরোধ করতে পারেন cmake ক্রস প্ল্যাটফর্ম উপায়ে নিজেই এটি করতে:
cmake -E env EnvironmentVariableName="Hello World" cmake ..
env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
পরিবর্তিত পরিবেশে কমান্ড চালান।
কেবল সচেতন থাকুন যে এটি কেবল প্রথমবারের মতো কাজ করতে পারে। যদি সিএমকে পরপর বিল্ডগুলির মধ্যে একটির সাথে পুনরায় কনফিগার করে (আপনি কেবল কল করুন make
, একটি CMakeLists.txt
পরিবর্তন করা হয়েছিল এবং সিএমকে আবার প্রজন্মের প্রক্রিয়াটির মধ্য দিয়ে চলে), ব্যবহারকারী সংজ্ঞায়িত পরিবেশ পরিবর্তনশীল আর থাকতে পারে না (সিস্টেম ওয়াইড এনভায়রনমেন্ট ভেরিয়েবলের তুলনায়)।
সুতরাং আমি আমার প্রকল্পগুলিতে সেই ব্যবহারকারীদের সংজ্ঞায়িত পরিবেশ পরিবর্তনশীলগুলি সিএমকে ক্যাশে ভেরিয়েবলের মধ্যে স্থানান্তর করি:
cmake_minimum_required(VERSION 2.6)
project(PrintEnv NONE)
if (NOT "$ENV{EnvironmentVariableName}" STREQUAL "")
set(EnvironmentVariableName "$ENV{EnvironmentVariableName}" CACHE INTERNAL "Copied from environment variable")
endif()
message("EnvironmentVariableName = ${EnvironmentVariableName}")
রেফারেন্স
আপনার আপনার ভেরিয়েবলগুলি রফতানি করা দরকার। সুতরাং লিনাক্সে উদাহরণস্বরূপ:
export EnvironmentVariableName=foo
অপরিকল্পিত ভেরিয়েবলগুলি CMAKE এ খালি।
IF($ENV{COVERAGE}) ... END()
, আবাহন: COVERAGE=1 cmake ..
। মঞ্জুর, আমি বিষয়বস্তুগুলি যাচাই করি না, এবং জানি না এটি কী না। তবে এটি অবশ্যই এটি পরীক্ষার জন্য কাজ করে যদি এটি সংজ্ঞায়িত হয় বা না হয়!
পরিবেশের ভেরিয়েবলগুলি (যেটি আপনি সিস্টেমের বৈশিষ্ট্যগুলি ব্যবহার করে সংশোধন করেছেন) কেবলমাত্র নতুন সাবশেল তৈরি করার সময় কেবল সাব-শেলগুলিতে প্রচার করা হয়।
আপনি যখন ব্যবহারকারী এনভ ভার্স পরিবর্তন করেছেন আপনার যদি কমান্ড লাইন প্রম্পট (ডস বা সাইগউইন) খোলা থাকে, তবে তারা প্রদর্শিত হবে না।
আপনি ব্যবহারকারী সেটিংস পরিবর্তন করার পরে একটি নতুন কমান্ড লাইন প্রম্পট খোলার প্রয়োজন।
ইউনিক্স / লিনাক্সের সমতুল্য আপনার .bash_rc এ একটি লাইন যুক্ত করছে: মানগুলি পেতে আপনার একটি নতুন শেল শুরু করা দরকার।
SET var_name=var_value
বর্তমান ডস সেশনে পরিবেশ পরিবর্তনশীল SETX var_name var_value
সেট করতে বা স্থায়ীভাবে সেট করতে চালাতে পারেন: সেট এবং সেটেক্স দেখুন । স্থানীয় সেট এছাড়াও আকর্ষণীয় হতে পারে।
source ~/.bashrc
পরিবর্তিত .bashrc
ফাইলটি আবার চালাতে এবং আপনার বর্তমান সেশনে নতুন মানগুলি পেতে চালাতে পারেন।