Eclipse 月食靛蓝C++;项目设置 我在Ubuntu中用编译器强大的G+ ++ 4.6 创建了一个C++共享库项目。 一些依赖项库需要一些关于编译器和操作系统的预处理器命令来正确编译,如 #elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)

Eclipse 月食靛蓝C++;项目设置 我在Ubuntu中用编译器强大的G+ ++ 4.6 创建了一个C++共享库项目。 一些依赖项库需要一些关于编译器和操作系统的预处理器命令来正确编译,如 #elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__),eclipse,preprocessor,project-settings,Eclipse,Preprocessor,Project Settings,但是,Eclipse不会自动定义它们(至少是我使用的版本),Eclipse中是否有一个设置或选项可以为我这样做?您可以在项目属性中设置预处理器定义: 但是,在您的情况下,我不会使用这些,因为它们不应该是特定于项目的(因为它们是特定于编译器的)。我觉得你在找这些。我不确定llvm/clang(有一些,但我现在不记得了),但是对于GCC,您应该使用宏\uuuu GNUC\uuuu,它将由编译器本身定义,而不必担心。前导下划线告诉您,它们不是标准的一部分,并且在使用其他编译器(例如MSVC)时不一定定

但是,Eclipse不会自动定义它们(至少是我使用的版本),Eclipse中是否有一个设置或选项可以为我这样做?

您可以在项目属性中设置预处理器定义:

但是,在您的情况下,我不会使用这些,因为它们不应该是特定于项目的(因为它们是特定于编译器的)。我觉得你在找这些。我不确定llvm/clang(有一些,但我现在不记得了),但是对于GCC,您应该使用宏
\uuuu GNUC\uuuu
,它将由编译器本身定义,而不必担心。前导下划线告诉您,它们不是标准的一部分,并且在使用其他编译器(例如MSVC)时不一定定义


对于
vsprintf\u s
的跨平台使用:

// this will be set on Visual Studio only, so this code is added for all other compilers
#ifndef _MSC_VER
#define vsprintf_s(b,l,f,v) vsprintf(b,f,v);
#endif

但一般来说,尝试使用在所有平台上都可用的函数(在本例中,使用
vsnprintf()

我的项目尝试使用vsprintf\u这个函数,它是microsoft实现,但是eclipse不会自动添加任何预处理器命令,我不想手动添加它们。结果,我最终出现了以下编译器错误:“glm/core/././gtx/string_cast.inl:26:30:error:“vsprintf_s”未在此范围内声明”仅仅是因为我没有正确设置依赖项库。这里是我的安装文件的链接,我也想添加这个:/*Enter“”G++-E-DM -XC+-C++排序*/当你把这个命令写入控制台时,它显示了编译器所定义的预处理器命令,正如马里奥所说的。我相信我的错误源是预处理器命令以外的东西。带有
\u s
后缀的标准函数是仅添加了MSVC的函数,以使它们更节省缓冲区溢出。只需在头文件中添加一些简单的“兼容性定义”(我将在上面添加一个简短的示例)。