问题标签 [makefile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
2380 浏览

build - 哪种构建系统对跨平台驱动程序、库和 GUI 构建的支持最好?

对于超过一百万行的多平台项目,构建系统的最佳选择是什么,该项目使用 GNU 和 Microsoft 工具链为所有主流操作系统生成驱动程序、库、命令行工具、GUI 和操作系统安装包?

我们的源代码主要是 C,带有 Python、C# 和 GNU makefile,以及一点 C++ 和 bash。它主要驻留在一个存储库中,但我们将源代码推送给各种第三方,这些第三方都有自己的源代码存储库。保持快速构建也有一些兴趣,这可能涉及拆分项目。

目前我们混合使用 GNU make、bash、python 和微软的 DDKBUILD。主要问题是我们在 make 之上维护了一组复杂的脚本,并且更愿意使用第三方(最好是开源)工具,而且 cygwin 在 Windows 上并没有被证明是健壮的(例如,fork 并不总是可能的) ),并且我们当前的构建系统不会构建或安装工具链,因此容易受到工具链版本更改的影响。

0 投票
4 回答
35446 浏览

xcode - 从命令行构建 Qt Xcode 项目

我已经玩 Qt 几个小时了。我发现 qmake 在 Mac OS X 上生成 Xcode 项目文件,而不是好的 ol' makefile。我不想每次构建“Hello, world”时都启动 Xcode。

我如何让 qmake 生成常规的 makefile,或者,如果这是在 Mac 上无法完成的事情,我如何.xcodeproj从命令行编译文件?

我试过了xcodebuild -project myProject -alltargets。我得到很多输出,然后是Abort trap.

0 投票
5 回答
784 浏览

vb.net - Compiling Massive VB.NET Project

To compile my current project, one exe with ~90,000 loc + ~100 DLL's it takes about a half hour or more depending on the speed of the workstation.

The build process is one of running devenv from Powershell scripts. This works very well with no problems.

The problem is that it is slow. I want to speed up this build process.

MSBuild (using VS-2005) is one option but there's a bug specifying icons to the vb compiler/linker on the command line such that it won't successfully link.

What other options are there to "make" VB.NET programs?

(Faster workstation is not an option.)

0 投票
7 回答
939 浏览

linux - 是否有充分的理由不利用 makefile 顶部的 '#!/bin/make -f' 来提供可执行的 makefile?

主要是为了我的娱乐,我makefile在我的$HOME/bin目录中创建了一个名为rebuild.mk,并使其可执行,文件的第一行读取:

我现在可以输入:

这会导致make执行。

除此以外,不永久利用此功能的原因是什么:

  • makefile 绑定到单个目录,因此它确实不适合我的主bin目录。

有没有人见过以前被利用的把戏?


收集一些评论,并提供更多背景信息。

  1. Norman Ramsey 报告说这种技术被用于 Debian。这很有趣。谢谢你。
  2. 我同意输入“make”更习惯用语。
  3. 但是,这种情况(以前未说明)是我的 $HOME/bin 目录中已经有一个跨平台的主 makefile,它是目录中 500 多个命令的主要维护工具。
  4. 但是,在一台特定的机器上(仅),我想添加一个生成文件来构建一组特殊的工具。因此,这些工具得到了一个特殊的 makefile,我rebuild.mk为这个问题调用了它(它在我的机器上有另一个名字)。
  5. 我确实可以make -f rebuild.mk通过使用 ' rebuild.mk' 来节省键入 ' ' 的时间。
  6. make跨平台修复实用程序的位置是有问题的。
  7. #!/usr/bin/env make -f技术可能会奏效,尽管我相信官方的交战规则是该行必须少于 32 个字符,并且命令可能只有一个参数。
  8. @dF 评论说该技术可能会阻止您传递要制作的参数。无论如何,这在我的 Solaris 机器上不是问题。我测试的三个不同版本的“make”(Sun、GNU、我的)都得到了我输入的额外命令行参数,包括选项(我的自制版本上的“-u”)和目标“someprogram”和宏 CC ='cc' WFLAGS=-v(使用不同的编译器并取消 Sun 编译器不理解的 GCC 警告标志)。

我不会提倡将其作为一种通用技术。

如前所述,这主要是为了我的消遣。我可以为这项特殊的工作保留它;我不太可能在分布式工作中使用它。如果我这样做了,我会提供并应用一个' fixin'脚本来修复解释器的路径名;事实上,我已经在我的机器上这样做了。该脚本是 Camel 书第一版(Larry Wall 的“Programming Perl”)的遗物。

0 投票
11 回答
6245 浏览

linux - 为 linux/freebsd 制作的替代品?

为 linux/freebsd制作哪些替代品?

0 投票
3 回答
1175 浏览

emacs - 配置 Emacs FlyMake 以使用 Rakefile 和 Makefile

我已经学习使用 Emacs 有一段时间了。至今非常喜欢。

我的问题是,对于小 C 代码,我更喜欢使用 Rake 而不是 Make。然而,flymake 似乎除了 Make 之外什么都不想要。因为它抱怨它找不到 Makefile。从命令行 Rake 的使用方式与 Make 相同,所以我想知道是否可以输入一些 emacs 配置以允许 flymake 使用 Rake?

纠正一下我正在做的事情。我实际上并没有编辑 Rakefile。flymake-ruby 根本没有帮助。我正在使用 C 代码。我只是使用 RAKE 使用 gcc 而不是 MAKE 编译 c 代码。

0 投票
7 回答
3009 浏览

bash - Makefile 有什么有趣的用途可以分享吗?

“make”不仅对构建您的编程项目有用,而且在其他领域似乎没有得到充分利用。

例如,可以将许多 shell 脚本重写为 Makefile 以允许独立部分并行运行(使用“make -jXX”)以保持所有 CPU 内核繁忙,并显式声明依赖项作为额外的好处,以防万一考虑在你的 shell 脚本中重新排序一些有副作用的任务。

你有什么不寻常的使用 make / Makefiles 的有趣故事要分享吗?您是否使用其他一些实用程序作为廉价的作业调度程序?

0 投票
9 回答
2250 浏览

ant - 工作流自动化:Makefile 与 Ant

每当我注意到工作流程中的某些内容是重复任务时,我都会尝试将其自动化。

例如,在服务器上部署某些东西所需的步骤。它通常是一个构建,然后是一个scp,最后是一些远程设置脚本:

  1. mvn包
  2. scp 目标/foobar.jar 服务器:
  3. ssh 服务器安装-foobar
  4. ssh 服务器 './bin/foobar 重启'

在这种情况下,我倾向于编写一个小的 Makefile,它看起来像

如何自动化您的工作流程?
Ant 是首选工具吗?有什么优点/缺点?

0 投票
6 回答
2477 浏览

makefile - 用于 linux 的免费安全分布式 make 系统

是否有任何安全且免费的与语言无关的 Linux 分布式 make 系统?

背景资料:

我运行的科学实验(计算机科学实验)有时会有很大的依赖树,有时会有数千或数万个树节点。此依赖关系树位于数据文件、数据处理可执行文件和结果文件之上。

多年来,我尝试了各种技术,包括:

  1. 使用数据库滚动我自己的依赖跟踪器并在每台工作机器上运行脚本。这可能会有点麻烦,尤其是在尝试使用非脚本语言时。
  2. 将所有处理命令放在单个 makefile 中,伪目标可以在不同的工作机器上手动“构建”。这不需要特殊工具,但是手动将工作分解为大小均匀的伪目标块并在每个工作盒上正确调用“make”可能会很痛苦。
  3. distmake:自动分发来自单个 makefile 的命令的执行...

我基本上在寻找类似 distmake 的东西,但更安全。据我所知,distmake 本质上为每个工作节点留下了一个敞开的后门。

如果替代品比 distmake 更强大,那也很好。如果您中断主 distmake 调用,它可以关闭后门服务器,但它不会正确终止工作节点上的执行进程。


说明:

我正在使用 makefile 处理数据,而不是使用 gcc 编译和链接。从我在文档中看到的内容来看,distcc 是一个专门用于分发 gcc 的工具。我将在共享文件系统上托管的非常大的数据文件上运行我自己的可执行文件,而不是在源文件上运行 gcc,因此 distcc 没有帮助。

工作节点是外部可见的机器,所以我希望任何工作守护进程至少与 ssh 一样安全。尽我所能在不阅读源代码的情况下判断,distmake worker 守护进程会打开一个端口,并将接受来自任何附加到它的人的命令。他们将以启动守护程序的用户身份执行命令。

0 投票
3 回答
1463 浏览

qt - 为什么库名称的名称中多了一个 0?

我有一个带有这样的项目文件的小型 Qt 项目:

当我从它编译一个库时qmake && nmake,它会生成文件

为什么将额外的 0 添加到 lib 和 dll 名称中?

生成的makefile似乎没有附加它,而是假设它,Makefile.Release它只是说:

如何防止它并根据需要命名我的库?

(请注意,手动修复 makefile.release 不是可接受的解决方案)