Questions tagged «build-system»

构建系统是用于编译源代码以及组装/打包结果的工具。


6
为什么不将Java用作构建语言?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 如果Java是一种通用语言,而构建程序可以用Java语言来描述,那么为什么这不是编写构建文件的最佳方法,而是使用Ant,Maven和Gradle之类的工具呢?那不是更直接,而且不需要学习另一种编程语言吗?(顺便说一句-这个问题也可以应用于其他语言,例如C#)
24 java  c#  builds  build-system 

4
CI如何用于解释语言?
我以前从未使用过持续集成系统(CI)。我主要使用MATLAB,Python或PHP进行编码。这些都没有构建步骤,我看不到如何将CI用于我的工作。一家大型公司的大型项目中的一位朋友告诉我,语言并不重要。 如果没有构建步骤,我看不到CI对我有什么用。我可以将CI视为可以运行单元测试的测试环境。我想念什么吗?

5
为什么构建工具使用的脚本语言不同于基础编程语言?
当我意识到大多数语言的主要构建工具/系统使用的语言与基础编程语言本身所使用的语言不同时,我最近一直在为Nodejs项目使用一些构建工具。 例如,make不使用C或C ++编写脚本,而ant(也不是Maven)不使用Java作为脚本语言。 诸如Ruby之类的较新语言的确将相同的语言用于诸如rake之类的构建工具,这对我来说很有意义。但是,为什么情况并非总是如此?拥有使用与基础语言不同的语言的构建工具的优势是什么?

1
Haskell构建和工件环境类似于Maven
我曾经是Java开发人员很长一段时间,但是最近我加入了Haskell团队。在Java世界中,如果您有一个大型项目,并且有多个团队在工作,那么一种常见的方法是使用工件服务器(例如Maven)来简化和加速开发。许多构建工具(例如Ant,Maven,Gradle)都可以构建项目并将jar文件上传到工件服务器,团队其他成员可以轻松使用。因此,通过将项目拆分为较小的子项目,还可以大大减少构建时间。 在Haskell方面,我们正在使用cabal该项目。我们的项目大约需要10-15分钟才能完成构建,而无需进行优化。如果打开编译器优化,则需要几个小时,这很痛苦。 我想知道,如何才能像在Java中一样做同样的事情。有没有一种简单的方法可以编译软件包(库)的二进制文件并将其上传到工件服务器,并在构建时使用预构建的二进制文件?我知道,因为Haskell生成机器代码(而不是Java中的字节码),所以可能存在兼容性问题,但是对于存储在工件服务器上的不同体系结构/操作系统,我们可能具有不同的二进制文件。

6
为什么makefile应该有一个“安装”目标?
来自C和C ++的世界,大多数构建系统都有一个install目标,尤其是Makefiles(例如,GNU建议在其中)或CMake。此目标在操作系统(例如,在C:\Program Files\Windows中)中复制运行时文件(可执行文件,库等)。 这感觉确实很棘手,因为对我而言,安装程序不是构建系统的责任(实际上是操作系统/程序包管理器的责任)。这也意味着构建系统或构建脚本必须知道已安装程序的组织,以及环境变量,注册表变量,符号链接,权限等。 充其量,构建系统应该有一个release目标,该目标将输出可安装的程序(例如.deb或.msi),然后请操作系统安装该程序。它还将允许用户无需键入即可卸载make uninstall。 所以,我的问题是:为什么构建系统通常建议有install目标?

4
用C ++编写构建脚本是否有意义?
我正在使用CMake生成我的项目IDE / makefile,但是我仍然需要调用自定义“脚本”来操纵我的编译文件甚至生成代码。 在以前的项目中,我一直在使用Python,而且还可以,但是现在在我正在处理的两个非常大的项目中管理很多依赖项时遇到了严重的麻烦,因此我想尽可能减少所有地方的依赖项。 有人建议我使用C ++编写我的构建脚本,而不是为此添加语言依赖。项目主题本身已经使用C ++,所以我可以看到几个优点: 要构建整个项目,只需要一个C ++编译器和CMake,就没有其他必要了(所有其他依赖项都是C或C ++); C ++类型的安全性(使用现代C ++时)使一切变得更容易“正确”; 它也是我所熟悉的语言,因此即使我能够编写一些不错的Python代码,也可以更轻松地使用它。 潜在的执行速度提升(但我认为这不会真正被察觉); 但是,我认为可能会有一些缺点,并且由于我尚未尝试,所以不确定真正的影响: 编写代码的时间可能会更长(也就是说,我不确定,因为我在C ++中足够高效,可以编写可以快速工作的东西,因此对于该系统来说,编写它不会太长)(编译时间不应在这种情况下是一个问题); 我必须假定我将作为输入阅读的所有文本文件都在UTF-8中,我不确定可以在运行时使用C ++轻松地对其进行检查,并且该语言不会为您进行检查。 C ++库比脚本语言更难管理。 我缺乏经验和前瞻性,所以也许我没有优势和劣势。所以问题是:为此使用C ++是否有意义?您有报告的经验吗,您是否看到了可能重要的优点和缺点?

2
我应该如何选择持续集成工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我在Wikipedia上找到了这个很酷的用于集成服务器的比较表,但是我不确定如何对工具进行排名以及我的需求和兴趣。图表本身似乎有很多标记为未知的框,因此,如果您愿意在Wikipedia上进行更新,那也可能很棒。 是否有一些性能最好的产品,所以我可以迅速缩小到四个或五个选项? 哪些产品似乎拥有最大的用户群体,以及最新的增强功能以​​及与新工具的集成? 开源产品是最好的吗?或者是否有高质量的工具对家里的单个用户来说可以是很多东西? 使用多个系统(主台式机,仅限本地局域网的家庭服务器,个人和工作笔记本,分布在所有主机上的多个虚拟机)是否会造成问题,以及如何对其进行管理?

2
是否有任何将相对预期任务时间纳入计划的构建系统?
这是我的问题的一个小例子: 假设一个构建作业包含名为AD的4个独立任务。总而言之,D花费的时间比AC花费的时间更长。 无法包含相对任务时间的构建系统可能会安排如下任务: --------------------------------------- CPU1: A | C | --------------------------------------- CPU2: B | D | --------------------------------------- 相反,如果调度程序知道任务时间差异,则可以提出以下更短的调度: --------------------------------------- CPU1: A | B | C | --------------------------------------- CPU2: D | --------------------------------------- 我的问题: 是否有任何将相对预期任务时间纳入计划的构建系统? 对于这种构建系统有哪些学术研究? 这些构建系统(如果存在)从哪里获取时间信息?试探法,以前的构建过程中收集的时间? 如果不存在这样的构建系统,为什么?是否有一个陷阱使他们不如乍一看看上去那么有价值?

5
要将git版本集成为内部版本号?
我和一个同事轮流讨论/讨论在构建时将从当前git存储库派生的版本集成到我们的代码中的问题/优点。 我们认为优点包括: 无需担心人为错误更新版本号 我们在设备中找到的内容与源于它的源代码之间的可追溯性 (对我们而言)出现的问题包括: IDE派生的构建系统(例如MPLABX)可能很难弄清楚将这些挂钩放置在何处(最终可能会很俗气) 实际将其集成到构建脚本/ makefile中的更多工作 耦合到特定的构建方法(例如,如果一个人使用XCode和另一个MPLABX进行构建怎么办)可能会给下游带来意外 因此,我们很好奇其他人在这场辩论中的地位。讨论变得容易流传开来。那里有很多人坚持端到端的自动化,把大量的前期工作挂在了一起,并耦合了它带来的影响。辩论的另一端还有很多其他人,他们所做的最简单的事情就是行之有效,并且承受风险。 对于哪一方最好着陆有合理的答案吗?
12 c  git  builds  build-system 

2
有多少个使用线程?
当我在台式机/笔记本电脑上(重新)构建大型系统时,我告诉我make使用多个线程来加快编译速度,如下所示: $ make -j$[ $K * $C ] $C应该在哪里指示机器拥有的内核数量(我们可以假设它是一位数字),而根据我的心情,$K我从2到有所不同4。 因此,例如,我可能会说make -j12我是否有4个核心,这表示make要使用多达12个线程。 我的基本原理是,如果仅使用$C线程,则内核将在进程忙于从驱动器中获取数据时处于空闲状态。但是,如果我不限制线程数(即make -j),那我就有浪费时间切换上下文,耗尽内存或什至更糟的风险。假设计算机具有$M千兆内存($M大约为10)。 所以我想知道是否有一个确定的策略来选择运行效率最高的线程数。

7
如何应对(编译)大型代码库的问题?
尽管我可以编写代码,但是我还没有从事大型项目的经验。到目前为止,我所做的是要么编写可以在几秒钟内完成编译的小程序(各种c / c ++练习,例如算法,编程原理,思想,范例,或者只是尝试api ...),要么在一些较小的项目上工作使用无需编译的脚本语言(Python,PHP,JS)制作。 问题是,当使用脚本语言进行编码时,每当我想尝试某些可行的方法时,我只要运行脚本,看看会发生什么。如果事情不起作用,我可以简单地更改代码,然后再次运行脚本来再次尝试,然后继续进行直到获得所需的结果。.我的意思是,您不必等待可以编译任何东西,因此,使用大型代码库,对其进行修改,对其进行添加或只是简单地使用它都是非常容易的-您可以立即看到所做的更改。 作为示例,我将使用Wordpress。尝试弄清楚如何为其创建插件非常容易。首先,您首先创建一个简单的“ Hello World”插件,然后为管理面板创建一个简单的界面以熟悉API,然后对其进行构建并使其变得更复杂,同时更改其外观。在每次较小的更改后尝试“如果它有用”和“它如何工作/感觉”之后,必须一遍又一遍地重新编译WP之类的东西的想法似乎效率低下,缓慢而错误。 现在,我该如何使用以编译语言编写的项目来做到这一点?我想为一些开源项目做出贡献,这个问题一直困扰着我。情况因项目而异,其中一些事先被明智考虑的项目将以某种方式“模块化”,而另一些只是一个大问题,需要一次又一次地重新编译。 我想了解更多有关如何正确完成的信息。有哪些通用实践,方法和项目设计(模式?)来应对?在程序员世界中如何称呼这种“模块化”?我应该在Google上寻求更多信息以了解更多信息吗?项目是否经常超出了最初的想法范围,这在一段时间后变得很麻烦?有什么方法可以避免长时间编译设计欠佳的项目?一种以某种方式模块化它们的方法(也许在开发时排除了程序的非重要部分(还有其他想法?))? 谢谢。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.