Scons добавляют случайное '1' к определению макроса только в OSX - PullRequest
0 голосов
/ 01 января 2019

У меня есть аргумент командной строки, который определяет тип для использования в классе Vector3.Он определяется в файле 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» в конец моего макроса, что приводит к поломке остальной части моего кода.

Когда я печатаю env ['vector3_type'] в scons, к нему не прикрепляется 1.Я понятия не имею, где это 1 добавляется.

1 Ответ

0 голосов
/ 01 января 2019

Это заставляет меня чувствовать себя немного глупо.Scons предполагает, что одиночная строка внутри CPPDEFINES является именем флага, и добавит к нему 1 для директив #ifdef и #ifndef.Правильный способ передать это #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")])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...