मैं वर्तमान में कुछ परियोजनाओं के निर्माण के लिए सेमेक का उपयोग करने पर काम कर रहा हूं, मुख्य प्लेटफार्म विजुअल सी ++, मिनजीडब्ल्यू जीसीसी और लिनक्स जीसीसी के साथ। जीसीसी के साथ निर्माण करते समय, मुझे -Wno-invalid-offsetof
कंपाइलर विकल्प निर्दिष्ट करने की आवश्यकता है।cmake में विभिन्न कंपाइलर्स के लिए विभिन्न कंपाइलर विकल्पों को कैसे लागू करें?
मेरे वर्तमान को ठीक करने के रूप में इस
if ( "${CMAKE_GENERATOR}" MATCHES "^Visual Studio"
OR "${CMAKE_GENERATOR}" MATCHES "^NMake"
)
set (CPPLIB_COMPILER_OPTS "")
else()
set (CPPLIB_COMPILER_OPTS "-Wno-invalid-offsetof")
endif()
...
set_target_properties(sh_core PROPERTIES COMPILE_FLAGS "${CPPLIB_COMPILER_OPTS}")
# repeated for all targets
यह काम करता है, लेकिन यह सोचते हैं कि दृश्य स्टूडियो लोगों के अलावा अन्य सभी जनरेटर जीसीसी के साथ निर्माण करेगा स्पष्ट रूप से असुरक्षित है है ...। शुरुआत के लिए, बोर्लैंड कंपाइलर्स के लिए आईआईआरसी जेनरेटर हैं। सबसे महत्वपूर्ण बात यह है कि बनाने का उपयोग हमेशा जीसीसी का उपयोग नहीं करना है।
अन्य कंपाइलर्स जिन्हें मैं उपयोग करने की संभावना है, वे llvm-gcc और clang हैं। सौभाग्य से, मुझे लगता है कि यहां तक कि क्लैंग जीसीसी-संगत विकल्पों का समर्थन करता है। लेकिन यह तर्क तब तक अच्छा है जब तक प्रासंगिक कोड कभी जारी नहीं किया जाता है।
सीमेक उपलब्ध कंपाइलरों के लिए जांच करने के लिए प्रतीत होता है और विशेष रूप से उस कंपाइलर के लिए मेकफ़ाइल उत्पन्न करता है (सवाल उठाना - कम से कम प्रोजेक्ट को सीधे बनाने का विकल्प क्यों नहीं है, बिना किसी मध्य-व्यक्ति की आवश्यकता के?)।
यह मामला होने के नाते, मैं उम्मीद कर रहा था कि मैं सीधे अपने सीएमके लिस्ट.txt फ़ाइलों में जीसीसी के लिए परीक्षण कर पाऊंगा। अभी तक, हालांकि, मुझे परीक्षण या किसी अन्य स्पष्ट समाधान के लिए उचित चर नहीं मिल रहा है।
क्या यह संभव है?
यह सही है! एक अप्रासंगिक बात, यद्यपि ... सी के लिए विकल्प की जांच करने के लिए बहुत अधिक बिंदु नहीं है, क्योंकि सी में अमान्य ऑफसेट के रूप में ऐसी कोई चीज़ नहीं है - यह केवल सी ++ में होती है। – Steve314
मुझे यह नहीं पता था। असल में मुझे नहीं पता था कि विकल्प क्या था, लेकिन यह सही समझ में आता है, क्योंकि सी में केवल पीओडी प्रकार हैं http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Warning-Options.html। और सीएमके अपने परीक्षण के दौरान संकलक चेतावनी को अनदेखा करता है - "अगर यह संकलित करता है तो यह काम करता है"। – richq
क्या विकल्पों के संयोजन की जांच करने का कोई तरीका है? इसके अलावा मैं कोई संकलन-समय चेतावनी सुनिश्चित करना चाहता था इसलिए चेतावनियों की जांच करने का एक तरीका तलाश रहा था। – thoni56