我正在开发一个插件,我需要#include
一个头文件(比方说some_file.h
),后者又包含environ.h
。现在,当我构建我的插件时,构建失败并在environ.h
文件和其他一些依赖文件中出现一些错误。以下是发生错误的environ.h
代码示例:
#ifndef PLATFORM
#ifdef WIN_ENV
#define PLATFORM "winpltfm.h"
#elif __OS2__
#define PLATFORM "os2pltfm.h"
#elif defined(unix) || defined(__unix)
#define PLATFORM "UnixPlatform.h"
#else
#error You must define the PLATFORM macro <------- Error-1
#endif
#endif
#include PLATFORM <------- Error-2
错误-1是:#error you must define the platform macro
,错误-2很容易猜到:Expected <filename> or "filename"
。
奇怪的是,包含some_file.h
的其他插件工作正常,即构建成功。这让我觉得必须有一些可能不同的构建设置。
有人建议在这种情况下应该做些什么来从environ.h
头文件中删除错误吗?
注意:我正在使用Xcode中的MAC OS X.
答案 0 :(得分:0)
我继续对这个答案发表评论,因此更容易解释......
首先,而不是#elif __OS2__
它应该是#elif defined(__OS2__)
,这就是为什么在您的测试期间#define __OS2__
无法正常工作,但是#define __OS2__ 1
。
编辑:根据您的评论,您注意到environ.h是一个标准文件,但它们如何检查OS2定义似乎很奇怪。他们强迫将其定义为一个值,而不仅仅是被定义。
第二次,从您的测试中可以看出,编译器没有为您定义__OS2__
,并且可能还有另一个标题,但目前不包含在翻译中选择some_file.h
的单位。如果您已确认项目中的另一个头文件未定义 OS2 ,则可以按照此SO answer给出的步骤为预处理器定义宏:
您需要更改的构建设置称为“预处理器宏” 它可以在项目的“构建设置”选项卡中找到 设置窗格(使用搜索框查找)。选择每个目标 转到“项目设置”窗格的左侧,然后进行修改 预处理器宏设置。
该设置被指定为预处理器的空格分隔列表 'foo'或'foo = bar'形式的宏。
第三次,您的编译器设置中的os2pltfm.h
包含路径似乎有误或缺失。
您可以按照此SO answer中的说明包含该文件:
您所要做的就是将-I标志添加到您的构建设置下 “其他C旗”
所以在你的目标的构建设置中搜索“Other C Flags”并添加 -I /路径到包括/