प्राप्त करें मैंने हाल ही में ऑटोटूल से सेमेक तक कुछ परियोजनाओं को स्विच किया है।सेमीकेक - प्रयुक्त कमांडलाइन झंडे "-D"
ऑटोोटूल पर मुझे पसंद होने वाली एक आम बात यह है कि - अगर मैं src build निर्देशिका में जाता हूं। config.log/config.status है - जहां शीर्ष पर ./configure --params
कमांड सूचीबद्ध है - इसलिए पूर्व प्रयुक्त कमांडलाइन झंडे को फिर से चालू करना आसान है।
(जैसे कुछ सामान संकलन के बाद - मैं जोड़ना चाहते हैं एक दूसरे --enable-this
- तो config.log/स्थिति से & पेस्ट कॉपी - और फिर से चलाएं ./configure --old-params --enable-this
)
cmake में - मैं -D
झंडे का एक समूह है - मैं cmake प्रोजेक्ट के साथ config.log/status में उपयोग की गई कमांडलाइन कैसे ढूंढ सकता हूं?
मुझे पता CMakeCache ... वहाँ है - लेकिन अपनी हार्ड इस्तेमाल किया झंडे
निकालने के लिएसंपादित करें:
#save commandline to rebuild this :)
set(USED_CMD_LINE "cmake ")
set(MY_CMAKE_FLAGS CMAKE_BUILD_TYPE CMAKE_INSTALL_PREFIX ENABLE_SSL ENABLE_LUA ENABLE_SSH ENABLE_SNMP MYSQL_USER MYSQL_PASS MYSQL_HOST MYSQL_DB FULL_FEATURES USE_COVERAGE)
FOREACH(cmd_line_loop IN ITEMS ${MY_CMAKE_FLAGS})
if(${cmd_line_loop})
STRING(CONCAT USED_CMD_LINE ${USED_CMD_LINE} "-D" ${cmd_line_loop} "=" ${${cmd_line_loop}} " ")
endif()
ENDFOREACH(cmd_line_loop)
STRING(CONCAT USED_CMD_LINE ${USED_CMD_LINE} " .. ")
#store to a file aka "config.status"
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/config.status ${USED_CMD_LINE})
बनाता है:
मैं निम्नलिखित समाधान के साथ आया था बिल्ड फ़ोल्डर में एक फ़ाइल config.status - सभी सेट cmake पैराम युक्त।
समर्थक:
- बाद cmake पर काम करने लगता है कॉल मेरी समस्या का समाधान करने लगता है
चोर:
FILE(write
पर chmod सेट करने में असमर्थ? चरMY_CMAKE_FLAGS
जाना जाता झंडे शामिल हैं - मैन्युअल अद्यतन करने की जरूरत है, तो एक नया झंडा जोड़ा जाता है
संबंध
यह एक उत्कृष्ट सवाल यह है - एक है कि मैं कुछ साल के लिए किया गया है लेकिन StackOverflow पर नहीं पूछा है। मुझे नहीं लगता कि cmake का आह्वान करते समय-डी फ्लैग का सेट प्राप्त करने का एक तरीका है। नीचे दिए गए उत्तर चक्र से पता चलता है कि सेमेक आमंत्रण के परिणामस्वरूप सटीक आदेश कैसे प्राप्त करें, लेकिन यह आपको cmake कॉन्फ़िगरेशन आमंत्रण के लिए उपयोग किए गए तर्क नहीं देता है। एक सही उत्तर एक अपेक्षा से अधिक कठिन होता है क्योंकि उपयोगकर्ता लगातार 'cmake -Danotherflag = value' का उपयोग कर एक सेमेक बिल्ड निर्देशिका को फिर से कॉन्फ़िगर कर सकता है। – Phil
दुखी है! वास्तव में मुझे वास्तव में सेमेक पसंद है, यह ऑटोमूल से 3.5 एमओओ मुद्दों (मैंने साथ रहने के लिए सीखा) की तरह हल किया है - लेकिन उपयोगकर्ता को कमांडलाइन झंडे की आपूर्ति करने की कमी वास्तव में खराब है। –
मेरा संपादित प्रश्न देखें - यह मेरे लिए मेरे मुद्दे को हल करता है (वैसे भी एक सही तरीके से नहीं) –