使用与Gyp和Ninja的单独构建目录

时间:2014-11-22 02:08:17

标签: 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这样的事情)。我尝试过以下方法:

(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。问题似乎是忍者在src / Example中执行cd并运行g++而不是在bld / Example(运行ninja命令)中运行它。那么,为了在bld / Example中使用a.out,我应该采取哪些不同的做法(以便它等同于从bld / Example运行g++ ../../src/Example/HelloWorld.cpp)?

感谢。

1 个答案:

答案 0 :(得分:0)

尝试将-Goutput_dir=bld/Example传递给gyp。