【发布时间】:2014-09-10 11:29:21
【问题描述】:
我一直在寻找一种可移植的方式来强制 CMake 启用编译器的 C99 功能,以避免出现以下 gcc 错误,例如:
error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int s = 1; s <= in_para->StepNumber; s++){
^
我也不想检查哪个编译器并附加如下内容:
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。在这个 Mantis 错误中,我了解了 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) 中。你知道它什么时候发布吗?
【问题讨论】:
-
-std=c99有什么不好?我就是这样做的。您可能没有超过两种不同的方式来支持不同的编译器(例如,Clang 和 GCC 是相同的)。 -
我想要一些既适用于 gcc 又适用于 MSVC 而无需检查 CMAKE_C_COMPILER_ID 的东西。顺便说一句,我也使用-std=c99,但似乎有/会有更好的方法与target_compiler_features。
-
也许有一天会有更好的东西。我不确定你的问题是什么。这不是 CMake 的发布日期预测网站。
-
好吧,我想知道是否会有一些 cmake 开发人员注意到这个问题。另外,由于我引用的错误报告已经三年了,我还希望有人已经找到了一些更好的方法。此外,还有一些关于这个未来特性的答案,但只处理 C++11,所以我问它是否也适用于 C(因为我不愿意阅读它的代码和/或草稿文档) .
-
据我所知 MSVC 根本没有实现 C99。