Использование отдельного каталога сборки с Gyp и Ninja

Вопрос, который у меня есть, связан с попыткой использовать отдельный каталог для вывода сборки. В частности, у меня есть следующая структура каталогов/файлов:

src/
   Example/
      Hello.gyp
      HelloWorld.cpp
      HelloWorld.h
      Util.h
bld/
   Example/

Hello.gyp выглядит так:

{
   'targets': [
      {
         'target_name': 'generated_code',
         'type': 'none',
         'actions': [
            {
               'action_name': 'cpp_compile',
               'inputs': [
                  'HelloWorld.cpp',
               ],
               'outputs': [
                  'a.out',
               ],
               'action': [
                  'g++', '<(_inputs)',
               ],
            },
         ],
      },
   ],
}

Что я хочу сделать, так это сгенерировать bld/Example/a.out (без выполнения чего-то вроде mv) с помощью ninja. Я пробовал следующее:

(1)

% cd src/Example
% gyp Hello.gyp --depth=. --generator-output=../../bld/Example -f ninja
% cd ../../bld/Example
% ninja -C out/Default
ninja: Entering directory `out/Default'
[1/1] ACTION generated_code: cpp_compile_b5a6de50eda755567ffb7e384fc76492
% ls
out
% ls ../../src/Example/
Hello.gyp  HelloWorld.cpp  HelloWorld.h  Util.h  a.out

так же как

(2)

% cd bld/Example
% gyp ../../src/Example/Hello.gyp --depth=. -f ninja
% ninja -C out/Default
ninja: Entering directory `out/Default'
[1/1] ACTION generated_code: cpp_compile_fb764512ff3485761831ee0d8df0b433
% ls
out
% ls ../../src/Example
Hello.gyp  HelloWorld.cpp  HelloWorld.h  Util.h  a.out

Ни один из подходов не работает, так как a.out находится в src/Example вместо bld/Example. Похоже, проблема в том, что ниндзя делает cd в src/Example и запускает g++ вместо того, чтобы запускать его внутри bld/Example (где запускается команда ninja). Итак, что я должен сделать по-другому, чтобы иметь a.out в bld/Example (чтобы это было эквивалентно запуску g++ ../../src/Example/HelloWorld.cpp из bld/Example)?

Спасибо.


person istarus    schedule 22.11.2014    source источник


Ответы (1)


Попробуйте передать -Goutput_dir=bld/Example в gyp.

person thakis    schedule 09.04.2015
comment
Он дает ответ на вопрос. Почему вы думаете, что это не ответ? - person thakis; 10.04.2015
comment
Потому что ответ должен объяснять, почему он решает проблему. В комментарии говорится, что попробуйте, возможно, сработает, но если вы не уверены и не можете объяснить, как это сделать, это должен быть просто комментарий. - person Michele d'Amico; 10.04.2015
comment
Я достаточно уверен, что это сработает (я работаю и с джипами, и с ниндзя). Я не вижу возможного в моем ответе. - person thakis; 10.04.2015
comment
Я не сомневаюсь, что это работает. Но это не имеет значения, ответ — это не просто решение проблемы, вы должны объяснить, цитируя документацию или источники, или какой-либо веский аргумент, в чем корень проблемы и как ее решить/исправить. . Кто прочитал ваш ответ, должен понять, откуда он взялся и соответствует ли то, что вы говорите, его требованиям. Вот почему на SO такой ответ не по теме... Но ваш ответ не первый и не последний. Мой комментарий был просто советом. - person Michele d'Amico; 10.04.2015