我使用编译器g++ 4.6在 Ubuntu 中创建了一个 C++ 共享库项目。
一些依赖库需要一些关于编译器和操作系统的预处理器命令才能正确编译,比如
#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)
但是Eclipse不会自动定义它们(至少是我正在使用的版本),Eclipse 中是否有一个设置或选项可以为我做到这一点?
我使用编译器g++ 4.6在 Ubuntu 中创建了一个 C++ 共享库项目。
一些依赖库需要一些关于编译器和操作系统的预处理器命令才能正确编译,比如
#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)
但是Eclipse不会自动定义它们(至少是我正在使用的版本),Eclipse 中是否有一个设置或选项可以为我做到这一点?
您可以在项目属性中设置预处理器定义:.
但是,在您的情况下,我不会使用这些,因为它们不应该是特定于项目的(因为它们是特定于编译器的)。我实际上认为您正在寻找这些。我不确定 llvm/clang(有一些,但我现在不记得了),但是对于 GCC,您应该使用__GNUC__
由编译器本身定义的宏,而不必担心它。前面的下划线告诉您,它们不是标准的一部分,并且在使用其他编译器(例如 MSVC)时不一定要定义。
对于跨平台使用vsprintf_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()
改用)。