Вопрос, который у меня есть, связан с попыткой использовать отдельный каталог для вывода сборки. В частности, у меня есть следующая структура каталогов/файлов:
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)?
Спасибо.