मेरे पास CMake का उपयोग करके निर्मित कई परियोजनाएं हैं और मैं उन्हें संकलित करने के लिए GCC या Clang / LLVM का उपयोग करने के बीच आसानी से स्विच करने में सक्षम होना चाहूंगा। मुझे विश्वास है (कृपया मुझे सुधारें अगर मैं गलत हूँ!) कि क्लैंग का उपयोग करने के लिए मुझे निम्नलिखित सेट करने की आवश्यकता है:
SET (CMAKE_C_COMPILER "/usr/bin/clang")
SET (CMAKE_C_FLAGS "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_CXX_COMPILER "/usr/bin/clang++")
SET (CMAKE_CXX_FLAGS "-Wall")
SET (CMAKE_CXX_FLAGS_DEBUG "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_AR "/usr/bin/llvm-ar")
SET (CMAKE_LINKER "/usr/bin/llvm-ld")
SET (CMAKE_NM "/usr/bin/llvm-nm")
SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
SET (CMAKE_RANLIB "/usr/bin/llvm-ranlib")
क्या इन और डिफ़ॉल्ट GCC चर के बीच स्विच करने का एक आसान तरीका है, अधिमानतः परियोजना विशिष्ट के बजाय एक सिस्टम-व्यापी परिवर्तन के रूप में (यानी न केवल उन्हें परियोजना के CMakeLists.txt में जोड़ना)?
इसके अलावा, क्या यह llvm-*
सिस्टम डिफॉल्ट के बजाय प्रोग्राम का उपयोग करने के लिए आवश्यक है जब gcc के बजाय क्लैंग का उपयोग करते हुए संकलित किया जाता है? क्या फर्क पड़ता है?
CMAKE_USER_MAKE_RULES_OVERRIDE
कार्यों को छोड़कर सब कुछ का पालन किया है । ऐसा लगता है कि फ़ाइल को अनदेखा किया जा रहा है (यानी ओवरराइड फ़ाइल मेंCMAKE_C_FLAGS_RELEASE
सेट होने के बावजूद-O4
, यह-O3 -DNDEBUG
cmake में डिफ़ॉल्ट मान दिखा रहा है )।