c语言编译器C11,如何检测c11支持编译器与cmake

如果您有CMake版本3.1.0或更高版本,您可以检测什么C功能

你的C编译器支持

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

project(foobar CXX)

message("Your C++ compiler supports these C++ features:")

foreach(i ${CMAKE_CXX_COMPILE_FEATURES})

message("${i}")

endforeach()

但通常你不需要在CMake脚本中使用CMake变量CMAKE_CXX_COMPILE_FEATURES。相反有两种方法如何告诉CMake根据C标准你的C文件应该编译,通过

明确指定C标准或通过指定所需的C特性,并让CMake引入C标准。 CMake将确保使用正确的命令行标志(例如-std = c 11)调用C编译器。

1.明确指定C标准

您可以通过设置CMake属性明确指定C标准

CXX_STANDARD

CXX_STANDARD_REQUIRED为您的CMake目标。

$ cat /tmp/src/CMakeLists.txt

project(foobar CXX)

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

add_executable(prog main.cc)

set_property(TARGET prog PROPERTY CXX_STANDARD 11)

set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)

$ cat /tmp/src/main.cc

int main() {

return 0;

}

$ mkdir /tmp/build

$ cd /tmp/build

$ cmake /tmp/src

-- The CXX compiler identification is GNU 4.8.2

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Configuring done

-- Generating done

-- Build files have been written to: /tmp/build

$ make VERBOSE=1 | grep main.cc | grep -- "-c"

/usr/bin/c++ -std=gnu++11 -o CMakeFiles/prog.dir/main.cc.o -c /tmp/src/main.cc

$

2.指定所需的C特性,让CMake引入C标准

您可以使用CMake命令target_compile_features指定在您的CMake目标中使用的C功能。从这个列表CMake将诱使要使用的C标准。 CMake全局属性CMAKE_CXX_KNOWN_FEATURES列出了您可以选择的C功能。

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

message("Your CMake version supports these C++ features:")

get_property(known_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)

foreach(i ${known_features})

message("${i}")

endforeach()

例如,这个具有文件名main.cc的C程序使用C 11特性:

cxx_strong_enums,cxx_constexpr,cxx_auto_type

#include

int main(int argc, char *argv[]) {

enum class Color { Red, Orange, Yellow, Green, Blue, Violet };

constexpr float a = 3.1415f;

auto b = a;

return EXIT_SUCCESS;

}

这个CMakeLists.txt文件将构建它

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)

project(foobar CXX)

add_executable(foobar main.cc)

set(needed_features

cxx_strong_enums

cxx_constexpr

cxx_auto_type)

target_compile_features(foobar PRIVATE ${needed_features})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值