मुझे पता है कि CMAKE का उपयोग करके एक सामान्य मशीन चौड़े पर्यावरण चर को कैसे प्राप्त किया जाए
$ENV{EnvironmentVariableName}
लेकिन मैं एक उपयोगकर्ता विशिष्ट पर्यावरण चर प्राप्त नहीं कर सकता। क्या यह संभव है और कैसे?
मुझे पता है कि CMAKE का उपयोग करके एक सामान्य मशीन चौड़े पर्यावरण चर को कैसे प्राप्त किया जाए
$ENV{EnvironmentVariableName}
लेकिन मैं एक उपयोगकर्ता विशिष्ट पर्यावरण चर प्राप्त नहीं कर सकता। क्या यह संभव है और कैसे?
जवाबों:
आप cmake मंगलाचरण के साथ लाइन पर एक चर पारित कर सकते हैं:
FOO=1 cmake
या BASH में एक चर निर्यात करके:
export FOO=1
तब आप इसका उपयोग करके एक cmake स्क्रिप्ट में चुन सकते हैं:
$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
देखें: यह स्थायी रूप से स्थापित करने के लिए सेट और setx । स्थानीय सेट भी दिलचस्प हो सकता है।
source ~/.bashrc
संशोधित .bashrc
फ़ाइल को फिर से चलाने और अपने मौजूदा सत्र में नए मान प्राप्त करने के लिए दौड़ सकते हैं ।