为什么Xcode 4.2为.cpp文件应用C文件构建规则脚本?
Why is Xcode 4.2 applying C files build rule script for .cpp files?
我有一个Xcode 4.2项目,其中包括一个windows交叉编译的目标。我对目标中的C源文件和c++源文件使用自定义构建规则,通过自定义脚本调用i386-pc-mingw32- c++。由于某些原因,Xcode运行自定义脚本,我已经指定为C源文件,即使在编译文件与。cpp扩展名。为什么会这样呢?我怎么能得到Xcode 4.2运行"c++源文件"脚本为我的。cpp文件?
我在这个项目中也有。c文件,我希望在编译c++文件时使用-std=c++11标志来启用一些c++11功能。如果我用这个标志编译。c文件,我最终会在math.h中包含的常量上出现奇怪的作用域问题,我还没有真正尝试和理解-我希望我能让Xcode为我的。cpp文件运行正确的脚本。
任何想法?
更新:我已经能够让Xcode运行正确的脚本。为此,我必须将Process下拉菜单选项从"C源文件"answers"c++源文件"都更改为"名称匹配的源文件",然后在提供的文本字段中手动输入*.c
和*.cpp
。现在我必须弄清楚为什么我得到一个M_PI was not declared in this scope
错误信息,我不是以前-也许是一个不同版本的数学。h正在使用-std=c++11标志,要么不包括M_PI常数或在不同的命名空间下提供它?
更新:继续对此进行工作-似乎我从math.h中使用的M_PI值实际上是一个宏,如果__STRICT_ANSI__
尚未定义,则仅#定义。显然,通过使用-std=c++11编译器标志切换到c++11导致这个__STRICT_ANSI__
宏被定义,因此我以前使用的M_PI宏不在那里。我想最好是定义我自己的pi常量,而不是把这个__STRICT_ANSI__
宏的声明弄得一团糟,但我可能会深入研究一下,只是为了澄清为什么现在我使用c++11标志来声明它。
更新:我发现这篇文章我如何使c++ 0x和__STRICT_ANSI__相处?这只是建议在'-std=c++11'标志之后取消定义'STRICT_ANSI'宏(或者更确切地说,等效的'-std=c++0x'标志)。虽然这似乎粗略,没有人张贴遇到任何问题,因为它,它似乎对我来说工作很好,以及在这种情况下。关于这个宏的Gcc文档位于这里:http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html,包含以下相关语句:
宏STRICT_ANSI是在使用-ansi选项时预定义的。一些头文件可能会注意到这个宏,并避免声明ISO标准不要求的某些函数或定义某些宏;这是为了避免干扰任何可能将这些名称用于其他事情的程序。
仍然不确定为什么'-std=c++11'标志会导致在默认情况下(显然是'-std=c++98')定义这个
如果你想在没有ANSI模式的情况下支持c++ 11,请使用-std=gnu++11
代替std=c++11
。
- 如何从构建 libgpio.so 的生成文件构建libgpio.a
- 为多个测试文件构建可执行文件
- 在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
- 从同一文件构建基类和继承类
- cmake:如何迭代目录中的所有源文件并将每个文件构建到可执行文件中
- MEX文件构建具有八度的构建(包装纸问题)
- 通过解析文件构建逻辑语句
- C++ 如何从.dat文件构建字符串的 2D 矩阵?5 列 x 行
- 使用其他文件构建 gcc 插件
- 从文件构建有向图
- 仅使用 DLL *.h 头文件构建(compile.link)应用程序代码,并在运行时加载 DLL 实现(显式链接)
- 使用两个文本文件构建链表
- 从PSD文件构建层comps
- 如何从多个c++文件构建二进制文件
- Eclipse:没有什么要为文件构建的
- MATLAB mex文件构建成功,但没有显示任何内容
- Android OS框架-将单个可执行文件构建为共享对象
- 当尝试从使用makefile生成的目标文件构建时,c++链接器错误.在我刚建立的时候不会发生
- 为什么Xcode 4.2为.cpp文件应用C文件构建规则脚本?
- Matlab Mex文件构建:代码更改不再影响mex文件