【问题标题】:Gradle will not build an executable when I include a header当我包含标头时,Gradle 不会构建可执行文件
【发布时间】:2015-11-03 00:58:47
【问题描述】:

我正在使用 gradle 作为本机二进制构建工具进行实验,我遇到了一个我似乎无法弄清楚的最奇怪的问题。如果我从 gradle.build 中删除包含目录,我得到一个 exe 就好了(当然注释掉方法调用),但是当我包含头目录时,它说它构建得很好,没有问题,但我没有一个可执行文件了。我尝试了几种不同的设置,但似乎每个人都说这应该可行。外部库加载正常。它的行为就好像它只是不想使用包含进行编译。

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

【问题讨论】:

    标签: java c++ gradle build executable


    【解决方案1】:

    很晚的答案,但也许它可以帮助其他人。

    您的gradle.build 应在“来源”部分指定源文件。我找不到定义单独的“包含”目录的方法。但是您尝试的方式并没有按照预期的方式进行。 将sources 更改为

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

    Gradle 只会编译 src/main/cpp 中的 cpp 文件。

    所有包含文件必须相对于源目录导入。比如

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

    或者您将包含文件复制到同一目录。

    【讨论】:

    • 我想我最终找到了让它工作的方法,但 CMake 做得更好。好多了。我将来可能会尝试使用 gradle,但它们对正确使用非常模糊。不管怎样,谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2013-01-24
    相关资源
    最近更新 更多