- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究scons,我只想确保在将大量脑细胞投入到完全不同的事物之前,我知道替代方案是什么。我过去一直在使用GNU make,但从未对此感到特别满意。
特别是:为什么Ant不经常在C / C++项目中使用? (鉴于存在ant cpptasks)我读了几篇文章说(显然)Ant更面向Java,但是这样做的缺点是什么?为什么scons要比make好得多?
我正在与TI DSP的交叉编译器合作,通常项目中有20-50个cpp文件。似乎构建管理中最困难的部分是自动依赖性检查。其他所有内容都只是映射文件列表以及一组编译器选项。
编辑:,为什么交叉编译会更改任何内容?它是一种编译器,其运行方式与gcc的运行方式相同,只是它生成的目标文件/可执行文件无法在我的PC上运行。
最佳答案
对于交叉编译,我认为您的最佳选择是CMake或Autotools。特别是如果您可以针对多种体系结构/平台编译代码。我通常在本机上编译我的代码的子集,以进行单元测试,并将其全部用于目标平台。 CMake可以很好地处理此问题,因为它使您可以指定交叉编译的库所在的位置。因此,与其在/ usr / lib中搜索交叉编译的libpng,不如告诉它在/ opt / arm-eabi-gcc /中或在构建计算机上安装了工具链库的任何位置。您可以为不同的变体创建多个构建目录,并使用make手动编译每个变体,或者使用绞死了的手动递归make来触发批量生产。
Ant的缺点是它基本上和Vanilla Make一样好或坏,另外一个缺点是您使用的不是C或C++主流的东西。您必须处理自己的所有依赖关系-内部依赖关系(例如C文件,头文件,库或可执行文件),以及外部依赖关系(例如,必须与第三方库链接)。另外,我认为Ant C任务并没有真正维护得那么多。我见过的每个使用Ant for C的人都提倡通过exec任务调用GCC。
SCons更好,但是交叉编译并不是它的优势。它也不是像CMake或Autotools这样的“构建系统”,它只是一个构建工具。就像在他们的维基it is pretty much "Make in Python"上说的那样。不过,它确实内置了对依赖项的处理,这意味着您不必使用“gcc -MM -MD”或其他任何东西,就可以将自己的内容滚动到那里,因此,这比Make更具优势。 SCons还支持检测已安装的第三方库,但是通常这样做的方式会增加您的构建时间。与其他系统不同,SCons每次运行都会运行检查阶段,尽管大多数结果都已缓存。 SCons还因其构建时间长而臭名昭著,尽管对于50个文件而言这并不是问题。 SCons中不存在交叉编译支持-您必须滚动自己的as discussed on this thread on the mailing list。通常,您将构建强制为类似于Unix平台,然后覆盖C编译器的名称。构建多个变体或将构建目录与源目录分离会充满陷阱,这使得如果您交叉和本地编译代码,它就不太合适。
CMake和Autotools很好地解决了依赖性问题,并且autotools的交叉编译支持已经成熟。 CMake从2008年4月发布的2.6.0版本开始进行交叉编译。您可以免费获得这些功能,以及打包和运行单元测试(“进行检查”或类似目标)之类的其他功能。这两个工具的缺点是它们需要引导。如果是CMake,则需要安装CMake二进制文件才能创建Makefile或Visual Studio解决方案文件。就Autotools而言,它稍微复杂一点,因为并不是每个编译该软件的人都需要automake和autoconf安装,只有那些需要更改构建系统的人(添加新文件才被视为更改构建系统)。从概念上讲,这两个阶段的引导过程(configure.ac->配置,配置+ Makefile.in-> Makefile)有点棘手。
编辑:交叉编译在构建系统中尤其令人头疼,原因是它增加了程序和库的自动检测的复杂性。 SCons不会处理此问题,而是由您自行解决。 Ant 类似地什么也不做。 Autoconf在autotools情况下可以解决此问题,但是在配置时可能需要在命令行上提供“--with-libfoobar = / some / path”,或者在链接阶段尝试使用/ usr / lib时会遇到断开的链接。 CMake的方法在工具链文件中显得有些繁琐,但这意味着您不必指定所有工具和库(CC,CXX,RANLIB,-with-ibfoo =等),因为标准约定。从理论上讲,您可以在多个项目中重复使用适当制作的CMake工具链文件来交叉编译它们。实际上,CMake的普及程度不足以使您对普通的黑客方便,尽管在创建多个专有项目时它可能很有用。
关于ant - ant + cpptasks vs.scons vs.make,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1034138/
这个问题可能不是很清楚,所以让我用一个例子来说明我的意思。说我要复制几个文件夹: ... 但是我需要从如下所示的文本文件中加载它们,而不是在脚本中对这些文件夹
ant 和 ant clean all 的区别? 请任何人都可以清楚地说明何时使用 Ant 和 Ant 清洁所有。 C:> Ant c:> Ant 清理所有 最佳答案 “ant”运行项目的默认目标。
我想转换如下: 到: aoeu 的值可以包含任意数量的逗号分隔元素。 我可以使用 groovy Ant 任务,但不能使用 ant-contrib 中的任何
我看到了 this相关问题,但我的情况不同,所以再次询问。基本上,我必须按特定顺序运行 12 个 ant 文件。对于每个 ant 文件,我选择不同的目标,例如“创建”或“构建并部署全部”。如何创建一个
我可以编写一个在从另一个 ant 任务执行时获取参数的 ant 任务吗? 我通常试图实现的目标是重用现有任务不同的参数。 我不知道的是: ant中有这样的子任务吗? 它可以带参数吗? 如何以及在何处指
给定一个 ant 文件集,我需要对其执行一些类似 sed 的操作,将其压缩为多行字符串(每个文件有效一行),并将结果输出到文本文件。 我在寻找什么 Ant 任务? 最佳答案 Ant script ta
我有一个包含 jars 等绝对路径的属性文件。当使用这些属性时,它们以构建文件中指定的 basedir 为前缀。 我如何获得绝对路径? build.properties: mylib=/lib/myl
我有一个任务: someString someOtherString 如何连接 s
我遇到的情况涉及运行带有可选参数的 ant 构建,这些参数总是被指定但并不总是被定义,就像这样 ant -DBUILD_ENVIRONMENT=test -Dusername_ext= -Dconf.
我正在寻找一种在 Ant 文件中包含 .jar 的方法,以便我可以立即使用它并在我的目标中调用它的方法。 就我而言,它是 ant-contrib-1.0b3.jar . 最佳答案 最好的方法是将 An
我在 ant 方面比较新,在学校我有一个作业来做一个构建文件。我的问题之一是将其名称(或路径)作为 ant 参数的文件复制到“/foldercopy”。我需要做类似的事情: Ant cpfile文件.
亲爱的,我目前在检索foreach循环中设置的属性的值时遇到一些问题。也许你们中的一个可以帮助我... 目的是检查自从生成相应的jar之后,是否已修改文件夹的一个文件。这样,我知道是否必须再次生成ja
我想创建一个宏: 然后使用它: 但是,我想为隐式元素指定一个默认值......类似于: 所以我可以这样使用它:
我想将 ANT、JavaSDK 和 FlexSDK 包含到我的项目目录中。我需要我公司的人能够从源代码编译。 我有一个以以下内容开头的 build.bat 文件: ant blah/blah/blah
我想对目录中的每个文件使用 ant 脚本集只读 但 exec 不允许 filelist: The typ
如果我以 root 身份运行任务,有没有办法检测它是否以 root 身份运行并以不同的用户身份运行某些任务。 我有一些任务需要以 root 身份运行,但其他任务只需要以当前用户身份运行。 最佳答案 如
是否可以通过ant任务使用JUnit 4.6的新MaxCore运行程序? 最佳答案 从4.6开始,不幸的是没有。您需要创建自己的自定义Ant任务才能利用MaxCore功能。 关于ant - Ant J
我有一个关于 Ant 及其对环境变量的处理的问题。 为了说明我有一个小样本。 给定 Ant 构建文件 test.xml:
该文件如下所示: a1,b1 a2,b2 ... 我知道值“a2”。 如何将值“b2”转换为属性值。 我知道如何通过以下方式选择包含“a2”的行: 但是不知道如何将属性值设置为“b2”。 我
Ant 属性可以通过属性文件设置,从属性文件解析其他属性吗? 例如,我可以这样做: 和 prop2 变成“in_test_xml1”。那挺好的。 但在这种情况下,当使用输入属性文件时: prop1
我是一名优秀的程序员,十分优秀!