ฉันมีโครงการหลายโครงการที่สร้างโดยใช้ 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-*โปรแกรมแทนที่จะเป็นค่าเริ่มต้นของระบบเมื่อทำการคอมไพล์โดยใช้ clang แทน gcc หรือไม่? ความแตกต่างคืออะไร?
CMAKE_USER_MAKE_RULES_OVERRIDEงาน ดูเหมือนว่าไฟล์จะถูกละเว้น (เช่นแม้จะCMAKE_C_FLAGS_RELEASEถูกตั้งค่าเป็น-O4ในไฟล์แทนที่ก็แสดงค่าเริ่มต้นเป็น-O3 -DNDEBUGcmake)