error: ‘for’ loop initial declarations are only allowed in C99 mode (改Makefile)

c – 强制C99在CMake(使用’for’循环初始声明)

 2019-04-25 C&C++ 编程之家 https://www.jb51.cc

编程之家收集整理的这篇文章主要介绍了c – 强制C99在CMake(使用’for’循环初始声明)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在寻找便携式方式来强制CMake启用编译器的C99功能,以避免以下 gcc错误

 
  1. error: ‘for’ loop initial declarations are only allowed in C99 mode
  2. for (int s = 1; s <= in_para->StepNumber; s++){
  3. ^

我也不想检查哪个编译器并附加如下:

 
  1. set(CMAKE_C_FLAGS "-std=c99") # that would be bad

所以我发现这个帖子:Enabling C99 in CMake和相关的功能要求:0012300: CMake has no cross-platform way to ask for C99.在这个螳螂错误中,我了解了target_compiler_features,之后我发现了这些SOF答案:How to activate C++11 in CMake?和How to detect C++11 support of a compiler with CMake.

所以我的问题是:这个target_compiler_features将提供一种要求C功能和C功能方法?现在最流行的方式是什么 – 我正在使用CMake 2.8.12.2. target_compiler_features不在CMake的最新版本(3.0.0)中.你知道什么时候被释放吗?

解决方法

创建目标(如库或可执行文件)后,将这样的行放在您的CMakeLists.txt文件中:

 
  1. set_property(TARGET tgt PROPERTY C_STANDARD 99)

其中tgt是您的目标的名称.

我认为这是添加在CMake 3.1中,文档在这里:

http://www.cmake.org/cmake/help/v3.1/prop_tgt/C_STANDARD.html

如果您需要支持早于3.1的CMake版本,则可以使用此宏:

 
  1. macro(use_c99)
  2. if (CMAKE_VERSION VERSION_LESS "3.1")
  3. if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
  4. set (CMAKE_C_FLAGS "--std=gnu99 ${CMAKE_C_FLAGS}")
  5. endif ()
  6. else ()
  7. set (CMAKE_C_STANDARD 99)
  8. endif ()
  9. endmacro(use_c99)

将该宏放置在顶级文件中,以便随处可见,您可以在任何使用C99代码定义目标的CMakeLists文件的顶部写入use_c99().

总结

以上是编程之家为你收集整理的c – 强制C99在CMake(使用’for’循环初始声明)全部内容,希望文章能够帮你解决c – 强制C99在CMake(使用’for’循环初始声明)所遇到的程序开发问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值