CMake

2014-11-13 13 views
5

में अंतर्निहित मंच/स्वाद का पता लगाने किसी को भी किसी भी cmake चर या हुक या कुछ और जो मुझे दे सकते हैं अंतर्निहित प्लेटफ़ॉर्म नाम/स्वाद नाम है जिस पर वह मार डाला जा रहा है पता है? उदा। लिनक्स CentOS लिनक्स Ubuntu लिनक्स SLESCMake

मैं जानता हूँ कि cmake है "CMAKE_SYSTEM" चर लेकिन यह है कि जैसे के लिए Linux के जायके फर्क मदद नहीं करता है किसी भी मदद की सराहना की है।

संपादित करें: मैं सिर्फ पढ़ा है कि यह lsb_release आदेश का उपयोग किया जा सकता है?

उत्तर

3

संभावना है, आपको खुद को ऐसा परीक्षण लिखना होगा। यहां संभावित उदाहरणों में से एक है, बस googled: https://htcondor-wiki.cs.wisc.edu/index.cgi/fileview?f=build/cmake/FindLinuxPlatform.cmake&v=4592599fecc08e5588c4244e2b0ceb7d32363a56

हालांकि आपकी वास्तविक जरूरतों के आधार पर परीक्षण काफी जटिल हो सकता है। उदाहरण के लिए उबंटू डेबियन-आधारित ओएस के रूप में हमेशा /etc/debian_version है और कई आरपीएम-आधारित ओएस पारंपरिक रूप से /etc/redhat-release है। वहाँ लिनक्स स्टैंडर्ड बेस (LSB) विनिर्देश में एक फ़ाइल /etc/os-release है, लेकिन स्थानीय होस्ट पर उदाहरण के लिए इस फ़ाइल को किसी अज्ञात कारण से :)

+0

हाँ समस्या काफी जटिल है और मैं मैन्युअल रूप से चर सेट अप करने की सोच रहा हूं लेकिन सिर्फ यह देखना चाहता था कि थ्री वहां कोई समाधान है या नहीं। – tejas

+0

ठीक है, मैंने ऊपर दिए गए संभावित कार्यान्वयन में से एक है। SuSE- आधारित के लिए आप '/ etc/SuSE-release' को भी देख सकते हैं एक और संभावित समाधान "मुख्य स्वाद" का पता लगाना है (उदाहरण के लिए क्या इसका 'आरपीएम'-,' डीईबी'- या ' 'आधारित और फिर एक ज्ञात पैकेज प्रबंधक को कॉल करें और वर्णित अनुसार एक विशिष्ट पैकेज की तलाश करें [यहां] (http://unix.stackexchange.com/questions/37336/how-to-detect-sles-version) – user3159253

+0

ध्यान दें कि '/ etc/os-release' कम से कम सभी सिस्टम-आधारित वितरणों पर काम करेगा। – mattdm

1

मेरी मशीन पर

CMAKE_SYSTEM_INFO_FILE == "Platform/Linux" 
CMAKE_SYSTEM_NAME == "Linux" 
CMAKE_SYSTEM == "Linux-<kernel version>" 

cmake --system-information के साथ प्राप्त के लिए खाली है, मुझे पता है लोगों की है कि उपयोग कहा अपने स्वयं के CMakeLists.txt फ़ाइलों में मैक्रो ताकि वे अपेक्षा के अनुरूप काम, शायद CMAKE_SYSTEM_NAME है क्या आप वास्तव में चाहते हैं, लेकिन यहाँ तुम जाओ, तो आप इस 3 मिलता है और आदेश अपने मशीन के गुणों का निरीक्षण करने के जहाँ तक cmake चिंतित है।

+0

दुर्भाग्यवश लिनक्स कर्नेल का एक संस्करण आमतौर पर दिए गए लिनक्स इंस्टॉलेशन की कम से कम महत्वपूर्ण विशेषता है। तकनीकी रूप से मैं वास्तव में एक प्राचीन कर्नेल सेट कर सकता हूं मेरे वर्कस्टेशन पर। ठीक है, तो मुझे एलआईबीसी को डाउनग्रेड या विशेष रूप से संकलित करने की भी आवश्यकता होगी ... ठीक है, कुछ "कोर सॉफ्टवेयर" के साथ। – user3159253

+0

@ user3159253 यही कारण है कि मैंने कमांड जोड़ा, वह आदेश आपको कुछ भी जानने की ज़रूरत है अपने सॉफ्टवेयर संकलित करें – user2485710

0

संख्या 2015 के रूप में, CMake जाहिरा तौर पर अभी भी आप अगर यह Ubuntu पर चल रहा है नहीं बता सकता।

सीएमके ने हमें एक मानक भाषा दी है जिसमें कचरा प्रक्रियात्मक मंच-विशिष्ट निर्माण विनिर्देश लिखने के लिए, लेकिन मेरी राय में यह इसके सभी लक्ष्यों में से असफल रहा है। यह उबंटू के लिए खुद को ठीक से पैकेज भी नहीं कर सकता; कुछ गरीब रखरखाव जाहिर तौर पर हाथ से कर रहे हैं।

2

फाइल सिस्टम पर फ़ाइलों की जाँच तुलना में थोड़ा कम जटिल उपलब्ध CMAKE_SYSTEM वार्स से सबसे अच्छा तुम कर सकते हो निकालना है। इस तरह उदाहरण के लिए एक CMakeLists.txt फ़ाइल युक्त लाइनों:

message("-- CMAKE_SYSTEM_INFO_FILE: ${CMAKE_SYSTEM_INFO_FILE}") 
message("-- CMAKE_SYSTEM_NAME:  ${CMAKE_SYSTEM_NAME}") 
message("-- CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") 
message("-- CMAKE_SYSTEM:   ${CMAKE_SYSTEM}") 

string (REGEX MATCH "\\.el[1-9]" os_version_suffix ${CMAKE_SYSTEM}) 
message("-- os_version_suffix:  ${os_version_suffix}") 

आउटपुट इस जब मैं cmake . भाग गया:

-- CMAKE_SYSTEM_INFO_FILE: Platform/Linux 
-- CMAKE_SYSTEM_NAME:  Linux 
-- CMAKE_SYSTEM_PROCESSOR: x86_64 
-- CMAKE_SYSTEM:   Linux-2.6.32-573.7.1.el6.x86_64 
-- os_version_suffix:  .el6 

और मेरी स्थिति के लिए, .el6 अंतर करने के लिए पर्याप्त था।

10

निम्नलिखित स्निपेट अंतर्निहित Linux सिस्टम के बारे में जानकारी के साथ LSB_RELEASE_ID_SHORT cmake चर भरता है:

find_program(LSB_RELEASE lsb_release) 
execute_process(COMMAND ${LSB_RELEASE} -is 
    OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT 
    OUTPUT_STRIP_TRAILING_WHITESPACE 
) 

उबंटू पर, उदाहरण के लिए, यह Ubuntu अर्जित करता है।

0

thiagowfx answer के आधार पर, आप distro के कोडनेम प्राप्त करने के लिए (अगर यह उपलब्ध है) चाहते हैं:

execute_process(COMMAND lsb_release -cs 
    OUTPUT_VARIABLE RELEASE_CODENAME 
    OUTPUT_STRIP_TRAILING_WHITESPACE 
) 

जैसे उबंटू 14 में।04 परिवर्तनीय RELEASE_CODENAMEtrusty रखेगा।

 संबंधित मुद्दे