`CMAKE_C_COMPILER_ID MATCHES "Clang|GNU"` 是如何工作的?
How `CMAKE_C_COMPILER_ID MATCHES "Clang|GNU"` works?
我想使用 Clang 作为首选构建我的项目,如果 Clang 不存在,并通过 GCC 编译它,但在我的实践中,Cmake 总是选择 GCC。
cmake_minimum_required (VERSION 2.8.12)
project (leptjson_test C)
if (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic -fsanitize=address -fsanitize=undefined -Wall")
endif()
add_library(leptjson leptjson.c)
add_executable(leptjson_test test.c)
target_link_libraries(leptjson_test leptjson)
How CMAKE_C_COMPILER_ID MATCHES "Clang|GNU"
works?
它将存储在 CMAKE_C_COMPILER_ID
中的字符串与扩展 regex 表达式 Clang|GNU
.
相匹配
I want to build my project using Clang as first choice, if Clang doesn't exist, and compile it by GCC
查看 CMakeDetermineCCompiler.cmake 将 CMAKE_C_COMPILER_LIST
设置为您的编译器列表。你可以这样做:
cmake_minimum_required(...)
if(LEPTJSON_DEV) # my recommendation
set(CMAKE_C_COMPILER_LIST clang gcc)
endif()
project(...)
我建议使用一些变量保护您的自定义设置,这样其他人也可以在没有您的设置的情况下使用您的库。
我想使用 Clang 作为首选构建我的项目,如果 Clang 不存在,并通过 GCC 编译它,但在我的实践中,Cmake 总是选择 GCC。
cmake_minimum_required (VERSION 2.8.12)
project (leptjson_test C)
if (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic -fsanitize=address -fsanitize=undefined -Wall")
endif()
add_library(leptjson leptjson.c)
add_executable(leptjson_test test.c)
target_link_libraries(leptjson_test leptjson)
How
CMAKE_C_COMPILER_ID MATCHES "Clang|GNU"
works?
它将存储在 CMAKE_C_COMPILER_ID
中的字符串与扩展 regex 表达式 Clang|GNU
.
I want to build my project using Clang as first choice, if Clang doesn't exist, and compile it by GCC
查看 CMakeDetermineCCompiler.cmake 将 CMAKE_C_COMPILER_LIST
设置为您的编译器列表。你可以这样做:
cmake_minimum_required(...)
if(LEPTJSON_DEV) # my recommendation
set(CMAKE_C_COMPILER_LIST clang gcc)
endif()
project(...)
我建议使用一些变量保护您的自定义设置,这样其他人也可以在没有您的设置的情况下使用您的库。