Tôi có một số dự án được xây dựng bằng CMake và tôi muốn có thể dễ dàng chuyển đổi giữa việc sử dụng GCC hoặc Clang / LLVM để biên dịch chúng. Tôi tin rằng (vui lòng sửa lại cho tôi nếu tôi nhầm!) Để sử dụng Clang tôi cần đặt như sau:
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")
Có một cách dễ dàng để chuyển đổi giữa các biến này và các biến GCC mặc định, tốt nhất là thay đổi toàn hệ thống thay vì cụ thể của dự án (nghĩa là không chỉ thêm chúng vào CMakeLists.txt của dự án)?
Ngoài ra, có cần thiết phải sử dụng các llvm-*
chương trình thay vì hệ thống mặc định khi biên dịch bằng clang thay vì gcc không? Có gì khác biệt?
CMAKE_USER_MAKE_RULES_OVERRIDE
công việc. Có vẻ như các tập tin đang bị bỏ qua (tức là mặc dùCMAKE_C_FLAGS_RELEASE
được đặt thành-O4
tệp ghi đè, nhưng nó hiển thị giá trị mặc định của-O3 -DNDEBUG
cmake).