我有许多使用CMake构建的项目,我希望能够在使用GCC或Clang / LLVM进行编译之间轻松切换。我相信(如果我弄错了,请纠正我!)要使用Clang,我需要设置以下内容:
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变量和默认GCC变量之间进行切换,最好是作为系统范围的更改而不是特定于项目的更改(即,不只是将它们添加到项目的CMakeLists.txt中)?
另外,llvm-*
在使用clang而不是gcc进行编译时,是否需要使用程序而不是系统默认值?有什么不同?
CMAKE_USER_MAKE_RULES_OVERRIDE
工作之外,其他一切都没有。似乎文件已被忽略(即,尽管在覆盖文件中将其CMAKE_C_FLAGS_RELEASE
设置为-O4
,但它显示的-O3 -DNDEBUG
是cmake 的默认值)。