ฉันรู้วิธีดึงตัวแปรสภาพแวดล้อมเครื่องกว้างปกติใน 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]...
เรียกใช้คำสั่งในสภาพแวดล้อมที่แก้ไข
โปรดทราบว่าสิ่งนี้อาจใช้ได้ผลในครั้งแรกเท่านั้น หาก CMake กำหนดค่าอีกครั้งด้วยหนึ่งในบิลด์ที่ต่อเนื่องกัน (คุณแค่เรียกเช่นmake
หนึ่งCMakeLists.txt
ถูกเปลี่ยนและ CMake ทำงานผ่านกระบวนการสร้างอีกครั้ง) ตัวแปรสภาพแวดล้อมที่ผู้ใช้กำหนดอาจไม่มีอีกต่อไป (เมื่อเปรียบเทียบกับตัวแปรสภาพแวดล้อมทั้งระบบ)
ดังนั้นฉันจึงโอนตัวแปรสภาพแวดล้อมที่ผู้ใช้กำหนดในโครงการของฉันไปเป็นตัวแปรแคชของ CMake:
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}")
ข้อมูลอ้างอิง
คุณต้องมีการส่งออกตัวแปรของคุณ ตัวอย่างเช่นใน Linux:
export EnvironmentVariableName=foo
ตัวแปรที่ไม่ได้ส่งออกจะว่างเปล่าใน CMAKE
IF($ENV{COVERAGE}) ... END()
, COVERAGE=1 cmake ..
ภาวนา: จริงอยู่ฉันไม่ได้ตรวจสอบเนื้อหาและฉันไม่รู้ว่ามันจะเป็นอย่างไร แต่มันใช้งานได้สำหรับการทดสอบว่ามีการกำหนดไว้หรือไม่
ตัวแปรสภาพแวดล้อม (ที่คุณแก้ไขโดยใช้คุณสมบัติของระบบ) จะแพร่กระจายไปยัง subshells เท่านั้นเมื่อคุณสร้าง subshell ใหม่
หากคุณมีพรอมต์บรรทัดคำสั่ง (DOS หรือ cygwin) เปิดอยู่เมื่อคุณเปลี่ยน User env vars ก็จะไม่ปรากฏขึ้น
คุณต้องเปิดพรอมต์บรรทัดคำสั่งใหม่หลังจากที่คุณเปลี่ยนการตั้งค่าผู้ใช้
สิ่งที่เทียบเท่าใน Unix / Linux กำลังเพิ่มบรรทัดใน. bash_rc ของคุณ: คุณต้องเริ่มเชลล์ใหม่เพื่อรับค่า
SET var_name=var_value
การตั้งค่าตัวแปรสภาพแวดล้อมในเซสชั่นดอสปัจจุบันหรือSETX var_name var_value
ที่จะตั้งอย่างถาวร: ดูชุดและsetX การตั้งค่าท้องถิ่นก็น่าสนใจเช่นกัน
source ~/.bashrc
เพื่อเรียกใช้.bashrc
ไฟล์ที่แก้ไขซ้ำและรับค่าใหม่ในเซสชันปัจจุบันของคุณได้