2013-05-08 4 views
6

मुझे अपने सीएमके फाइलों (सीएमके 2.8.10.2) में मेरे सी और सी ++ संकलन लाइनों में विभिन्न झंडे जोड़ने की जरूरत है। मुझे लगता है कि कुछ लोग add_definitions का उपयोग करते हैं, लेकिन जो मैं देख सकता हूं उससे प्रीप्रोसेसर झंडे (-D) के लिए है। मेरे पास कुछ झंडे हैं जो मैं प्रीप्रोसेसर को पास नहीं करना चाहता हूं।संकलक झंडे के लिए cmake सूची संलग्न फर्जी परिणाम पैदा करता है?

तो मैं CMAKE_C_FLAGS और CMAKE_CXX_FLAGS को संशोधित करने का प्रयास कर रहा हूं। मैं देख रहा हूँ कि कुछ लोगों को कुछ प्रयोग कर रहे थे की तरह:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here") 

लेकिन फिर मैं cmake डॉक्स में पढ़ा है कि यह कम कुशल है, और यह list(APPEND ...) उपयोग करने के लिए, इस तरह है करने के लिए सही रास्ता:

list(APPEND CMAKE_C_FLAGS -new -flags -here) 

हालांकि, जब मैं ऐसा करता हूं तो मेरी संकलन रेखा में अर्धविराम से अलग झंडे होते हैं और एक वाक्यविन्यास त्रुटि होती है। मैंने पढ़ा है कि अब यह सूचियां आंतरिक रूप से संग्रहित की जाती हैं, लेकिन मुझे लगता है कि जब मैं चर का उपयोग करता हूं तो इसे सेमेक द्वारा ख्याल रखा जाएगा। यह बहुत बुनियादी लगता है; क्या मुझसे कुछ गलत हो रही है? मेरा मतलब है, इन सूचियों में क्या अच्छा है, अगर उनका उपयोग तब तक नहीं किया जा सकता जब तक कि आप अर्धविराम से अलग मूल्यों की सूची नहीं चाहते हैं (और कौन चाहता है, मुझे लगता है कि विंडोज% पाथ% सेटिंग्स या कुछ अनुमान है)? क्या मुझे उद्धृत संस्करण का उपयोग करना चाहिए, भले ही दस्तावेज़ों का सुझाव है कि यह कम कुशल/उपयुक्त है?

+1

मैं सेट() दृष्टिकोण हालांकि के रूप में यह है जब चीजें आदि को कॉपी वर के नाम में एक बेमेल होना आसान है के लिए मैक्रो का उपयोग नाम} "$ {$ {name}} $ {item}") एंडमैक्रो() – Trass3r

उत्तर

6

इस मामले में, आप आमतौर पर set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here") तकनीक का उपयोग करेंगे।

आप अन्य अधिकांश संदर्भों में उसमें सही हैं, सीएमके संकलक के लिए अर्थपूर्ण कुछ अर्द्ध-कोलन अलग सूची का अनुवाद कर सकता है (उदाहरण के लिए निष्पादन योग्य में स्रोत फ़ाइलों की सूची), लेकिन इस मामले में, सीएमके लेता है कंपाइलर/लिंकर को पास करने के लिए एक एकल, पूर्ण स्ट्रिंग के रूप में झंडे।

यदि आप वास्तव में सीएमके सूची के रूप में झंडे की सूची रखना चाहते थे, तो आप सीएमके लिस्ट.txt से बाहर निकलने से पहले, आप सूची को CMAKE_C_FLAGS के एक स्ट्रिंग मान में "अनुवाद" कर सकते हैं, लेकिन यह देखना असामान्य है इस।

+1

एक और संक्षिप्त मुहावरे 'स्ट्रिंग (APPEND CMAKE_C_FLAGS "-न्यू-झंडे" है)। – Chadversary

1

सीएमके में, "सूची" अर्ध-कॉलन से अलग वस्तुओं की एक स्ट्रिंग है। उदाहरण के लिए:

set(FOO "a") 
list(APPEND FOO "b") # now FOO="a;b" 
list(APPEND FOO "c") # now FOO="a;b;c" 

CMake में, अंतरिक्ष -seperated मदों की एक स्ट्रिंग सिर्फ एक स्ट्रिंग, नहीं एक सूची है। इसमें शामिल होने के लिए string(APPEND) कमांड का उपयोग करें। उदाहरण के लिए:

set(FOO "a") 
string(APPEND FOO " b") # now FOO="a b" 
string(APPEND FOO " c") # now FOO="a b c" 

कि string(APPEND) आदेश की कमी है CMake के पुराने संस्करण पर, आप set आदेश पर वापस आने चाहिए। उदाहरण के लिए: मैक्रो (नाम आइटम संलग्न) \t सेट ($ {:

set(FOO "a") 
set(FOO "${FOO} b") 
set(FOO "${FOO} c") 
संबंधित मुद्दे