আমার কাছে সিএমকে ব্যবহার করে বেশ কয়েকটি প্রকল্প নির্মিত হয়েছে এবং আমি তাদের সংকলন করতে খুব সহজেই জিসিসি বা কলং / এলএলভিএম ব্যবহারের মধ্যে স্যুইচ করতে সক্ষম হতে চাই। আমি বিশ্বাস করি (দয়া করে আমার ভুল হয়ে থাকলে আমাকে সংশোধন করুন!) যে ক্ল্যাংটি ব্যবহার করতে আমাকে নিম্নলিখিতগুলি সেট করতে হবে:
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")
এগুলি এবং ডিফল্ট জিসিসি ভেরিয়েবলগুলির মধ্যে স্যুইচ করার কোনও সহজ উপায় কি પ્રાધાનিকভাবে প্রকল্প নির্দিষ্টের পরিবর্তে সিস্টেম-ভিত্তিক পরিবর্তন হিসাবে (যেমন কেবল সেগুলি প্রকল্পের সিএমকেলিস্ট.টেক্সটগুলিতে যুক্ত করা যায় না)?
এছাড়াও, llvm-*
সিসিটির পরিবর্তে ক্ল্যাং ব্যবহার করে সংকলন করার সময় সিস্টেমের ডিফল্টগুলির চেয়ে প্রোগ্রামগুলি ব্যবহার করা কি প্রয়োজনীয় ? পার্থক্য কি?
CMAKE_USER_MAKE_RULES_OVERRIDE
কাজগুলি বাদে সমস্ত কিছু অনুসরণ করেছি । দেখে মনে হচ্ছে ফাইলটি উপেক্ষা করা হচ্ছে (অর্থাত্ ওভাররাইড ফাইলেCMAKE_C_FLAGS_RELEASE
সেট থাকা সত্ত্বেও-O4
, এটি-O3 -DNDEBUG
সিমেকে ডিফল্ট মান দেখাচ্ছে )।