在Linux下借助CMake使用Clang 和 libc++
libc++是一个架构在LLVM上的C++标准库。
libc++的架构比GCC的libstdc++的架构先进。
因为现在,GCC的代码是杂糅式的,缺乏架构设计。
而LLVM的架构是先进的。
libc++和Clang编译器都是LLVM架构下的不错的项目。
首先在现代化的C++项目中,已经没人手写Makefiles了。
CMake工具的引入,方便我们用Clang 和 libc++ 代替GCC 和libstdc++。
经过本人的反复探索,我已经找到如何在Linux下借助CMake使用Clang 和 libc++
首先,肯定要安装这些工具。
通过apt install clang, apt install libcxx-dev
CMake的调用语句这么写:
cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug -S . -B ./build/
CMakeLists文件这么写:
cmake_minimum_required(VERSION 3.20.4)
# Set the compiler
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
project(Hello-Clang
VERSION 0.0.1
DESCRIPTION "A test project"
LANGUAGES C CXX
)
# set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
# set(CMAKE_C_COMPILER "/usr/bin/clang")
function (check_os)
message(STATUS "Checking Operating System Env:")
message(STATUS "Host information:")
cmake_host_system_information(RESULT env_info QUERY IS_64BIT OS_NAME OS_PLATFORM OS_RELEASE OS_VERSION)
list(GET env_info 0 bits)
message(STATUS " Is 64-bit: ${bits}")
list(GET env_info 1 os_name)
message(STATUS " OS name: ${os_name}")
cmake_host_system_information(RESULT host_name QUERY HOSTNAME)
message(STATUS " Host name: ${host_name}")
list(GET env_info 2 os_platform)
message(STATUS " OS platform: ${os_platform}")
list(GET env_info 3 os_release)
message(STATUS " OS release: ${os_release}")
message("")
endfunction()
function (check_compiler)
message(STATUS "Check C++ Compiler: ${CMAKE_CXX_COMPILER_ID}")
endfunction()
function(main)
check_os()
check_compiler()
message(" Hello CMake")
cmake_path(SET path1 "./src/main.cxx")
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# set compiler flags
add_executable(hello ${path1})
target_compile_options(hello
# STD
PUBLIC -stdlib=libc++
PUBLIC