Gradle C插件示例

me

在本地文件系统上,我具有以下C项目目录结构:

derpus/
    src/
        derpus/
            c/
                derpus.c
            headers/
    build.gradle

在哪里derpus.c

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts("Derp!");
    return EXIT_SUCCESS;
}

我想使用Gradle Native(C)插件来管理整个derpus版本。具体来说,我希望Gradle:

  1. 生成一个Gradle包装器,以便我可以gradlew用于所有构建调用;
  2. 编译并内置derpusderpus.exevia中gradlew
  3. 运行时生成Eclipse项目信息,gradlew eclipse以便随后将项目导入Eclipse(我已经预装了Eclipse CDT插件)

这是我的build.gradle

apply plugin: 'c'
apply plugin: 'eclipse'

sources {
    c {
        source {
            srcDir "src/derpus/c"
            include "**/*.c"
        }
        exportedHeaders {
            srcDir "src/derpus/headers"
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

显然,我应该能够gradle wrapper照顾到第一个项目。但是对于编译和构建,我在C插件文档中的任何地方都没有看到真正运行编译和构建的命令或构建调用

关于第三项,使用Eclipse插件并通过调用它gradlew eclipse,我想知道是否还需要做其他事情,以使生成的项目/设置配置与Eclipse CDT插件期望的兼容以与C一起使用。程式。尽管我打算让Gradle处理我的所有构建,但我仍然想在Eclipse中进行所有开发,因此CDT附带的所有功能(语法高亮,编译等)对我来说都很重要。

me

好的,我找出了所有3个,并认为我会将这个答案发布给以后的读者。

请注意:对于以下情况的现代C程序员,此解决方案确实可行:

  • 想要利用现代IDE工具(例如语法高亮,错误,goto声明,打开调用层次结构,Eclipse的调试器等)在Eclipse中进行所有开发但...
  • 希望使用像Gradle这样的现代的,可实现的**构建系统来完成所有命令行/ shell构建

此外,由于我使用的是Windows,因此我选择将MinGW用于我的GCC设置,因此,如果您使用的是* nix或Mac,或者如果您更喜欢Cygwin,则必须进一步自定义此解决方案。

而且,我仅使用最新的Eclipse CDT插件(8.6)和Gradle 2.3验证了此功能可用于Eclipse Luna。

首先,我必须更正C插件的用法,将其更改build.gradle为如下所示:

apply plugin: 'c'
apply plugin: 'eclipse'

model {
    components {
        derpus(NativeExecutableSpec) {
            sources {
                c(CSourceSet) {
                    source {
                        srcDir "src/derpus/c"
                        include "**/*.c"
                    }
                    exportedHeaders {
                        srcDir "src/derpus/headers"
                    }
                }
            }
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

这使我可以正常运行gradle wrapper

接下来,我开始发现非常奇怪的是,Gradle本机Binaries文档从未提及用于编译/构建本机可执行文件的构建调用。我大胆猜测这可能是利用Gradle的“传统的配置”方法,然后我就跑了gradlew build-瞧!巨大的成功。现在下derpus/build/binaries/derpusExecutablederpus.exe到现在为止还挺好。

当您现在想要将此Gradle管理的项目导入Eclipse,但仍然让Eclipse CDT提供现代C IDE的所有常规功能时,真正的麻烦就出现了。

我从运行开始gradlew eclipse,它在derpus/项目根目录下添加了以下文件

  • .project
  • .settings/language.settings

我打开Eclipse并将其作为项目导入,但是遇到了各种各样的错误,当我将鼠标悬停#include <stdio.h>derpus.c文件中并单击时F3,Eclipse没有执行任何操作。显然,某些配置仍然不正确。因此,我必须进行黑客攻击。

原来您只需要:

  • 当然,首先要确保CDT插件已安装并且可以正常工作(哦!)
  • 在Eclipse中创建一个“虚拟” C项目,这将使您可以将Eclipse CDT生成的设置复制到实际项目中
  • 修改您的实际.project文件,使其包含虚拟项目文件中生成的文件<buildSpec /><natures />元素.project
  • 将虚拟项目的.cproject文件复制到实际项目的根目录,然后在文本编辑器中将其打开。您想用实际项目的名称重命名虚拟项目名称的所有实例。在我的情况下,有3个实例。在我的情况下,我的虚拟项目实际上是命名为dummy,而我的实际项目名为derpus所以我不得不改变的3个实例dummyderpus在这个文件中。
  • 重新启动Eclipse

现在,您的实际项目的行为将与使用CDT插件创建的C项目完全相同。不要忘记删除您的“虚拟”项目;-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章