如何使用EclipseCDT构建SCons项目?

如何使用EclipseCDT构建SCons项目?,eclipse,build,eclipse-cdt,scons,Eclipse,Build,Eclipse Cdt,Scons,我们有一个相当大的C/C++项目,使用SCON进行构建。我想尝试通过EclipseCDT来构建它。任何人都有这方面的经验,可以告诉我将scons设置为构建者的步骤。(不使用SConsBuilder插件,它将无法与Fedora-11的Eclipse CDT一起工作)。我以前尝试过,SCons将非常类似。解决方案是创建一个空的Makefile项目,然后在选项中将“make”更改为“scons”。在Windows上,路径中可能需要scons.bat文件。这并不比创建一个包含all:\n\tscons类

我们有一个相当大的C/C++项目,使用SCON进行构建。我想尝试通过EclipseCDT来构建它。任何人都有这方面的经验,可以告诉我将scons设置为构建者的步骤。(不使用SConsBuilder插件,它将无法与Fedora-11的Eclipse CDT一起工作)。

我以前尝试过,SCons将非常类似。解决方案是创建一个空的Makefile项目,然后在选项中将“make”更改为“scons”。在Windows上,路径中可能需要scons.bat文件。这并不比创建一个包含
all:\n\tscons
类型模式的虚拟Makefile好多少,但这是最简单的工作

这不是一个好主意。它里面有一大堆硬编码的python代码,可以输出给sconstuct。它已经很久没有更新了,到目前为止,很多代码可能已经在SCON中被弃用了。我认为更好的方法是像SCons为VisualStudio做的那样,或者像CMake为EclipseCDT做的那样。这意味着根据构建配置动态生成.cproject文件

我曾经写过一篇文章,它遍历构建节点收集源文件,并输出一个.project和.cproject文件。与CMake的做法类似,但Waf创建变体目录的默认行为意味着您不必处理源代码外构建问题。此后,这已被添加为一项新的功能。它只使用了WAFAPI的一部分,因此可以通过少量工作将其转换为SCON。换言之,外面什么都没有。.cproject格式在任何地方都没有真正的文档记录,与Java版本相比非常难看


不过,我在CDT方面做得不太好——它远远落后于Java开发工具——而且我仍然使用Vim和
:make
,所以最后都有点学术性。

您可以使用一个Makefile,它只需将重要目标委托给SCON即可

.PHONY: all clean install
default:    all
all:    
    scons
clean:
    scons -c
install:
    scons install

然后就可以使用开箱即用的“Standard Make C Project”了。

我们的一个学生为Eclipse CDT实现了一个新的SCons集成,它可以双向工作,即,它可以导入SCons文件并用相应的设置填充Eclipse CDT项目,还可以从Eclipse项目设置生成SCons文件。此外,它还提供了交互式SCON模式,大大加快了大型SCON项目的增量构建。它将很快免费向公众发布,请参见

只需更改生成器设置,无需插件。选择外部生成器并设置SCON而不是make,然后将workdir设置为放置SConstruct的目录


现在,您可以使用maketargets视图创建scons构建命令,并像make命令一样执行它。默认情况下,带有SCON的错误分析器可以正常工作,不需要额外配置。

在现有项目中使用Sconsolidator时要非常小心!!当您单击链接将SCons性质添加到项目中时,它将盲目覆盖项目根目录中的任何现有SConstruct/SConscript文件。(我正试图将此作为一个bug报告给项目,但到目前为止每次都会被阻止。)

不过,Sconsolidator应该可以工作。

您应该可以在此处报告您的问题:我投票支持此问题,因为我使用了Sconsolidator,而且它可以工作。唯一需要注意的是,它是封闭源代码。除非它是开源的,否则我看不到它会得到广泛的使用。我尝试了sconsolidor,可惜它在我们的项目中不起作用。它声称在导入设置时出现了问题,控制台将有更多关于出错原因的信息(并且控制台显示为空)。哦,好的。@Ted Middleton:你介意打开一个问题,更详细地描述你的项目和使用的设置,这样我就可以试着重现这个问题了吗?@迈克尔·波特。现在可以在Github上使用sconsolidator了。@Ted:我也遇到了同样的问题。我入侵了我们的SConstruct,删除BuildIfoCollector并打印它自己的输出。BuiltInfo收集器扫描节点太慢(我们有1000多万个节点)。