2015-11-03 51 views
2

我正在做Gradle作爲本地二進制構建工具的實驗,並且我遇到了似乎無法解決的最奇怪的問題。如果我從gradle.build中刪除include目錄,我會得到一個exe文件(當然,註釋掉方法調用),但是當我包含頭文件目錄時,它說它沒有問題就可以正常生成,但我沒有一個可執行文件了。我嘗試了一些不同的設置,但似乎每個人都認爲這應該起作用。外部庫加載正常。它的行爲就好像它不想使用include進行編譯。當我包含標題時,Gradle不會生成可執行文件

的main.cpp

#include <iostream> 

#include "Chpt_1.h" 

int main(){ 
    std::cout << "Hello, world!" << std::endl; 

    Chpt_1.count(); 
    return 0; 
} 

Chat_1.h

#ifndef CHPT_1_H 
#define CHPT_1_H 

#include <iostream> 

int count() { 
    std::cout << "Count!" << std::endl; 

    return 0; 
} 

#endif 

的build.gradle:

apply plugin: 'cpp' 

model { 
    components { 
     main(NativeExecutableSpec) { 
      sources { 
       cpp { 
        source { 
         srcDir "src/main/cpp" 
         include "src/main/headers" 
        } 
       } 
      } 
     } 
    } 
} 

目錄結構

Shards 

build.gradle 
[other misc files] 
-src 
--main 
---cpp 
----main.cpp 
---headers 
----Chpt_1.h 

回答

2

相當晚的答案,但也許它有助於其他人。

您的gradle.build應在「sources」部分指定源文件。我找不到一種方法來定義一個單獨的「包含」目錄。但是你嘗試的方式並不是按照它的意圖去做。 更改sources

sources { 
    cpp { 
     source { 
      srcDir "src/main/cpp" 
      include "**/*.cpp" 
     } 
    } 
} 

搖籃只會編譯src/main/cpp的cpp文件。

所有包含文件必須相對於源目錄導入。例如

#include "../includes/Chpt_1.h" 

或者您將包含文件複製到相同的目錄。

+0

我想我最終找到了一種方法來使它工作,但CMake做得更好。好多了。我可能會在未來嘗試使用gradle,但他們對於正確的使用方式非常模糊。無論哪種方式,謝謝你的答案。 – BleuGamer

相關問題