Scons 仅在 OSX 上将随机“1”附加到宏定义
Scons appending a random '1' to macro definition on OSX only
我有一个命令行参数,它定义了用于 Vector3 class 的类型。在SConstruct文件中定义如下:
EnumVariable('vector3_type', 'The type to use for Vector3\'s xyz coordinates', 'float', allowed_values=['float', 'double', 'long_double'], ignorecase=2)
这个变量添加到这里的环境中:
if env['vector3_type'] != 'long_double':
env.Append(CPPDEFINES = ["BIGROCK_VEC3_TYPE %s" % env['vector3_type']])
else:
env.Append(CPPDEFINES = ["BIGROCK_VEC3_TYPE long double"])
这在 Windows 10 上工作正常,但是当我尝试在 OSX 上编译时,出现以下错误:
In file included from src/octree.cpp:1:
In file included from src/octree.h:5:
src/vector3.h:15:9: error: expected member name or ';' after declaration specifiers
BIGROCK_VEC3_TYPE x, y, z;
^~~~~~~~~~~~~~~~~
<command line>:1:33: note: expanded from here
#define BIGROCK_VEC3_TYPE float 1
~~~~~ ^
scons 或 g++ 在我的宏末尾添加了一个额外的“1”,导致我的其余代码中断。
当我在 scons 中打印 env['vector3_type'] 时,它没有附加 1。我不知道这个 1 被添加到哪里。
这让我觉得有点傻。 Scons 假定 CPPDEFINES 中的一个单独的字符串是一个标志名称,并且将为 #ifdef 和 #ifndef 指令附加 1。传递此 #define 的正确方法是:
if env['vector3_type'] != 'long_double':
env.Append(CPPDEFINES = [("BIGROCK_VEC3_TYPE", env['vector3_type'])])
else:
env.Append(CPPDEFINES = [("BIGROCK_VEC3_TYPE", "long double")])
我有一个命令行参数,它定义了用于 Vector3 class 的类型。在SConstruct文件中定义如下:
EnumVariable('vector3_type', 'The type to use for Vector3\'s xyz coordinates', 'float', allowed_values=['float', 'double', 'long_double'], ignorecase=2)
这个变量添加到这里的环境中:
if env['vector3_type'] != 'long_double':
env.Append(CPPDEFINES = ["BIGROCK_VEC3_TYPE %s" % env['vector3_type']])
else:
env.Append(CPPDEFINES = ["BIGROCK_VEC3_TYPE long double"])
这在 Windows 10 上工作正常,但是当我尝试在 OSX 上编译时,出现以下错误:
In file included from src/octree.cpp:1:
In file included from src/octree.h:5:
src/vector3.h:15:9: error: expected member name or ';' after declaration specifiers
BIGROCK_VEC3_TYPE x, y, z;
^~~~~~~~~~~~~~~~~
<command line>:1:33: note: expanded from here
#define BIGROCK_VEC3_TYPE float 1
~~~~~ ^
scons 或 g++ 在我的宏末尾添加了一个额外的“1”,导致我的其余代码中断。
当我在 scons 中打印 env['vector3_type'] 时,它没有附加 1。我不知道这个 1 被添加到哪里。
这让我觉得有点傻。 Scons 假定 CPPDEFINES 中的一个单独的字符串是一个标志名称,并且将为 #ifdef 和 #ifndef 指令附加 1。传递此 #define 的正确方法是:
if env['vector3_type'] != 'long_double':
env.Append(CPPDEFINES = [("BIGROCK_VEC3_TYPE", env['vector3_type'])])
else:
env.Append(CPPDEFINES = [("BIGROCK_VEC3_TYPE", "long double")])