在本地文件系统上,我具有以下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:
gradlew
用于所有构建调用;和derpus
到derpus.exe
via中gradlew
;和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附带的所有功能(语法高亮,编译等)对我来说都很重要。
好的,我找出了所有3个,并认为我会将这个答案发布给以后的读者。
请注意:对于以下情况的现代C程序员,此解决方案确实可行:
此外,由于我使用的是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/derpusExecutable
我derpus.exe
!到现在为止还挺好。
当您现在想要将此Gradle管理的项目导入Eclipse,但仍然让Eclipse CDT提供现代C IDE的所有常规功能时,真正的麻烦就出现了。
我从运行开始gradlew eclipse
,它在derpus/
项目根目录下添加了以下文件:
.project
.settings/language.settings
我打开Eclipse并将其作为项目导入,但是遇到了各种各样的错误,当我将鼠标悬停#include <stdio.h>
在derpus.c
文件中并单击时F3
,Eclipse没有执行任何操作。显然,某些配置仍然不正确。因此,我必须进行黑客攻击。
原来您只需要:
.project
文件,使其包含虚拟项目文件中生成的文件<buildSpec />
和<natures />
元素.project
.cproject
文件复制到实际项目的根目录,然后在文本编辑器中将其打开。您想用实际项目的名称重命名虚拟项目名称的所有实例。在我的情况下,有3个实例。在我的情况下,我的虚拟项目实际上是命名为dummy
,而我的实际项目名为derpus
。所以我不得不改变的3个实例dummy
来derpus
在这个文件中。现在,您的实际项目的行为将与使用CDT插件创建的C项目完全相同。不要忘记删除您的“虚拟”项目;-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句