2011-03-11 9 views
39

कल्पना कीजिए मैं निम्नलिखित स्ट्रिंग है:सीएमकेई के साथ सूची में स्ट्रिंग को विभाजित करने का आम तरीका क्या है?

set(SEXY_STRING "I love CMake") 

तो मैं SEXY_STRING से SEXY_LIST प्राप्त करने के लिए चाहते हैं तो मैं

list(LENGTH SEXY_LIST len) 

और len कर सकते हैं बराबर है 3.

मैं कई मिल गया है वेब पर मैक्रोज़, लेकिन मैं वास्तव में जानना चाहता हूं कि इसे "प्राकृतिक" तरीके से कैसे किया जाए। यह ऑपरेशन बहुत बुनियादी और व्यापक रूप से उपयोग किया जाता है।

उत्तर

50

अपने विभाजक को ; द्वारा बदलें। मुझे ऐसा करने का कोई और तरीका नहीं दिख रहा है।

cmake_minimum_required(VERSION 2.8) 

set(SEXY_STRING "I love CMake") 
string(REPLACE " " ";" SEXY_LIST ${SEXY_STRING}) 

message(STATUS "string = ${SEXY_STRING}") 
# string = I love CMake 

message(STATUS "list = ${SEXY_LIST}") 
# list = I;love;CMake 

list(LENGTH SEXY_LIST len) 
message(STATUS "len = ${len}") 
# len = 3 
+1

मैं एक तरीका है कि थोड़ा अधिक सामान्य पाया है, लेकिन तुम्हारा भी अच्छा है। धन्यवाद! –

+3

वह सेक्सी है :-) –

+1

आपको वास्तव में 2.8 की आवश्यकता नहीं है। मुझे यकीन है कि 2.6 काम करता है। शायद 2.4 –

10
string(REGEX MATCHALL "[a-zA-Z]+\ |[a-zA-Z]+$" SEXY_LIST "${SEXY_STRING}") 
+0

पर सबसे अच्छा जवाब यह एक बेहतर समाधान हो सकता है। (Http://www.cmake.org/cmake/help/v2.8.9/cmake.html से उद्धरण) #REGEX MATCHALL जितनी बार संभव हो सके नियमित अभिव्यक्ति से मेल खाएगा और आउटपुट वैरिएबल में मैचों को ** *सूची***। – Nianliang

+1

मैं *** स्ट्रिंग का उपयोग कर रहा हूं (रेगेक्स MATCHALL "([^ \] + \ | [^ \] + $)" ARG_LIST "$ {ARGN}") *** – Nianliang

20

आप SEPARATE_ARGUMENTS आदेश का उपयोग कर सकते हैं: http://www.cmake.org/cmake/help/cmake2.6docs.html#command:separate_arguments

cmake_minimum_required(VERSION 2.6) 

set(SEXY_STRING "I love CMake") 

message(STATUS "string = ${SEXY_STRING}") 
# string = I love CMake 

set(SEXY_LIST ${SEXY_STRING}) 
separate_arguments(SEXY_LIST) 

message(STATUS "list = ${SEXY_LIST}") 
# list = I;love;CMake 

list(LENGTH SEXY_LIST len) 
message(STATUS "len = ${len}") 
# len = 3 
+0

'' में अलग-अलग_रियम्स() 'का उपयोग करना लिनक्स पर मैक्रो() 'को अलग-अलग होना चाहिए (UNIX_COMMAND" $ {ARGS} ")" अगर एआरजीएस मैक्रो के लिए तर्क नाम है। –

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

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