gpt4 book ai didi

c++ - 为什么 Xcode 4.2 应用 C 文件为 .cpp 文件构建规则脚本?

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:51 25 4
gpt4 key购买 nike

我有一个 Xcode 4.2 项目,其中包含一个为 Windows 交叉编译的目标。我对该目标中的 C 源文件和 C++ 源文件使用自定义构建规则,通过自定义脚本调用 i386-pc-mingw32-g++。出于某种原因,Xcode 运行我指定为用于 C 源文件的自定义脚本,即使在编译具有 .cpp 扩展名的文件时也是如此。为什么会这样?如何让 Xcode 4.2 为我的 .cpp 文件运行“C++ 源文件”脚本?

我在这个项目中也有 .c 文件,我希望在编译 c++ 文件时使用 -std=c++11 标志以启用某些 c++11 功能。如果我用这个标志编译 .c 文件,我最终会遇到关于 math.h 中包含的常量的奇怪范围问题,我还没有真正尝试和理解 - 我希望我可以让 Xcode 为我的运行正确的脚本.cpp 文件。

有什么想法吗?

更新:我已经能够让 Xcode 运行正确的脚本。为此,我必须将进程下拉菜单选项从“C 源文件”和“C++ 源文件”更改为“名称匹配的源文件:”,然后手动输入 *.c*.cpp 在提供的文本字段中。现在我必须弄清楚为什么我得到一个 M_PI was not declared in this scope 错误消息,而我以前没有 - 也许不同版本的 math.h 正在与 -std 一起使用=c++11 标志,它不包含 M_PI 常量或在不同的命名空间下提供它?

更新:继续处理这个问题 - 看来我在 math.h 中使用的 M_PI 值实际上是一个宏,如果 __STRICT_ANSI__ 尚未定义,它只是#define'd。显然,通过使用 -std=c++11 编译器标志切换到 c++11 已导致定义此 __STRICT_ANSI__ 宏,因此我之前使用的 M_PI 宏不存在。我想最好只定义我自己的 pi 常量,而不是弄乱这个 __STRICT_ANSI__ 宏的声明,但我可能会深入研究一下,只是为了澄清为什么现在要声明它我正在使用 c++11 标志。

更新:我找到这篇文章 How can I make C++0x and __STRICT_ANSI__ get along? ,这只是建议在“-std=c++11”标志(或者更确切地说,等效的“-std=c++0x”标志)之后取消定义“STRICT_ANSI”宏。虽然这看起来粗略的,没有人因为它而遇到任何问题,在这种情况下它似乎对我来说也很好用。关于这个宏的 Gcc 文档位于:http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html,以及以下相关声明:

The macro STRICT_ANSI is predefined when the -ansi option is used. Some header files may notice this macro and refrain from declaring certain functions or defining certain macros that the ISO standard doesn't call for; this is to avoid interfering with any programs that might use these names for other things.

仍然不确定为什么 '-std=c++11' 标志导致它在默认情况下没有被定义(显然是 '-std=c++98')。

最佳答案

如果您希望在没有 ANSI 模式的情况下支持 C++11,请使用 -std=gnu++11 而不是 std=c++11

关于c++ - 为什么 Xcode 4.2 应用 C 文件为 .cpp 文件构建规则脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com