2014-11-22 84 views
0

我試圖使用單獨的目錄來編譯輸出的問題。特別是,我有以下目錄/文件結構:與Gyp和忍者一起使用單獨的構建目錄

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 /例/ 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 /實施例,而不是bld/Example。問題似乎是,忍者在src/Example中執行cd,並運行g++而不是在bld/Example(其中運行ninja命令)中運行它。那麼,爲了在bld/Example中使用a.out,我應該做些什麼不同(因此它相當於從bld/Example運行g++ ../../src/Example/HelloWorld.cpp)?

謝謝。

回答

0

嘗試將-Goutput_dir=bld/Example傳遞給gyp。

+0

它提供了一個問題的答案。你爲什麼認爲這不是一個答案? – thakis 2015-04-09 22:07:25

+0

因爲答案應該解釋爲什麼它解決了這個問題。評論說*嘗試它可能工作*但如果你不確定,你不能解釋的方式,應該只是一個評論。 – 2015-04-09 22:23:48

+0

我相當肯定它會工作(我在gyp和忍者上工作)。我的答案中沒有看到「可能」。 – thakis 2015-04-09 22:36:44