ฉันมีโครงการหลายโครงการที่สร้างโดยใช้ 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 -DNDEBUG
cmake)