问题标签 [build-system]

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 投票
4 回答
9252 浏览

go - 哪些构建系统适用于 Go?

我知道 Go 源代码附带了一个$GOROOT/doc我现在正在使用的 Makefile(它在 中),但是其他流行的构建系统是否添加了对 Go 的支持?有没有人为sconswaf等编写过构建脚本...

你用什么来构建你的 Go 程序?

0 投票
1 回答
595 浏览

build-system - 构建目标列表生成器时如何在 OMake 中处理具有未知目标的构建规则

我有一个使用 OMake 构建系统的项目,我正在尝试处理一个相当棘手的极端情况。

我有一些定义文件和一个可以获取这些定义文件并创建 GraphViz 文件的工具。但是有两个问题:

  • 每个定义文件可以产生多个图形,它可以产生的图形列表被编码在文件中。我的转储工具确实有一个-list选项,它列出了定义文件将生成的所有图形。
  • 此转储工具内置于源代码树中。
  • 我希望这个列表在 OMakefile 中可用,这样我就可以使用其他规则将 DOT 文件转换为 SVG,并且有一个依赖于所有 SVG 的虚假目标(目标:构建我所有图形的 SVG 描述的单个构建命令)。

如果我只有第一个问题,那就很容易了——我会运行该工具来构建一个列表,然后使用该列表来构建一个目标,该目标调用转储程序来输出 GraphViz 文件。但是,我宁愿在需要之前强制构建转储工具。

如果是这样make,我只会make递归地运行来构建转储工具。但是,OMake 不允许递归调用,并且该build函数只能从osh.

有什么建议可以很好地解决这个问题吗?

0 投票
1 回答
651 浏览

c++ - 使用递归依赖聚合构建系统

我最近开始使用跨平台构建系统(按需生成 make 文件、Visual Studio 解决方案/项目等)建立自己的库和项目,我遇到了一个可能已经解决的问题。

我遇到的问题是:当一个应用程序有一个依赖项也有依赖项时,被链接的应用程序必须链接依赖项及其所有子依赖项。这以递归方式进行,例如

(为了争论,假设我们只处理静态库。)

  • TopLevelApp.exe
    • 依赖关系_A
      • 依赖_A-1
      • 依赖_A-2
    • 依赖_B
      • 依赖_B-1
      • 依赖性_B-2

所以在这个例子中,TopLevelApp 将需要链接dependency_A、dependency_A-1、dependency_A-2 等,B 也是如此。我认为在目标应用程序中手动记住所有这些的责任是非常次优的。还有一个问题是确保所有目标都使用相同版本的依赖项(假设某些目标依赖于相同的东西,例如 boost)。

现在需要链接所有的库,并且没有办法绕过它。我正在寻找的是一个为你管理这个的构建系统。因此,您所要做的就是指定您依赖某些东西,并且该库的适当依赖项将自动被拉入。

我一直在研究的构建系统是 premake premake4,它不能处理这个问题(据我所知)。有谁知道可以处理此问题的构建系统?如果没有,那为什么不呢?

0 投票
2 回答
9737 浏览

static - 如何强制使用静态库而不是共享?

在我的 SConscript 我有以下行:

如何让 scons 使用 mylib.a 而不是 mylib.so,同时与其他库动态链接?

编辑:希望尽可能少地使用特定于平台的黑客。

0 投票
8 回答
2698 浏览

c - Macro definitions for headers, where to put them?

When defining macros that headers rely on, such as _FILE_OFFSET_BITS, FUSE_USE_VERSION, _GNU_SOURCE among others, where is the best place to put them?

Some possibilities I've considered include

  1. At the top of the any source files that rely on definitions exposed by headers included in that file
  2. Immediately before the include for the relevant header(s)
  3. Define at the CPPFLAGS level via the compiler? (such as -D_FILE_OFFSET_BITS=64) for the:
    1. Entire source repo
    2. The whole project
    3. Just the sources that require it
  4. In project headers, which should also include those relevant headers to which the macros apply
  5. Some other place I haven't thought of, but is infinitely superior

A note: Justification by applicability to make, autotools, and other build systems is a factor in my decision.

0 投票
1 回答
84 浏览

build-system - 使用构建系统进行可重复的研究?

我正在做一个涉及一系列程序的研究项目,每个程序都会生成一个输出文件,该文件成为下一个程序的输入。我想让重复我用来创建所需输出的一系列命令变得容易。似乎make或任何其他构建系统都非常适合这项任务,但是我看过的所有构建系统(可能除了make本身)似乎都强烈倾向于从源代码构建可执行文件,并且我不知道如何对他们做任何其他事情。除了将源代码编译成可执行文件之外,有没有人有使用构建系统完成任务的经验?我可以轻松地使用构建系统来促进可重复的研究,还是应该寻找不同类型的工具?

0 投票
5 回答
106704 浏览

build - Autotools、Cmake 和 Scons 之间有什么区别?

Autotools、Cmake 和 Scons 之间有什么区别?

0 投票
7 回答
442 浏览

c++ - 了解 C++ 编译

我最近意识到,一般来说,我不知道 ac/c++ 编译器是如何工作的。我承认这最初来自于试图理解标头守卫,但后来意识到我缺乏编译的工作原理。

以 Visual C++ 为例;有“头文件”文件夹、“资源文件”文件夹和“源文件”文件夹。这些文件夹的分离以及您放入其中的内容有什么意义吗?对我来说,它们都是源文件。获取代码片段:

片段 1

编译器错误提示“a1.cpp(3) : fatal error C1004: unexpected end-of-file found” 我希望它不会因为 a1.cpp 文件不是 #included 哪里存在 main 方法下一个代码片段

片段 2

由于“main.cpp(6) : error C2065: 'b': undeclared identifier”而出错。如果您像这样包含 a1.cpp

片段 3

编译器抱怨“a1.obj : error LNK2005: "int b" (?b@@3HA) already defined in main.obj”。int r = 4片段 2 和 3 都忽略了没有缺少分号的事实,因为我怀疑它与其 xxxx.h 文件有关。如果我从片段 1 的项目中删除 a1.cpp 文件,那么它编译得很好。显然,我所期望的不是我得到的。有很多关于如何在 cpp 中编码的书籍和教程,但 cpp 在编译过程中处理文件和源代码的方式并不多。这到底是怎么回事?

0 投票
1 回答
8258 浏览

android - 如何在 Android 中包含 envsetup.sh 的命令?

嗨,我在编译时在我的 android 源代码上运行了命令 ./build/envsetup.sh。我想使用同一文件中存在的以下命令。-cgrep -mmm -mm

但我收到以下错误!

我应该如何解决这个问题?我需要对 envsetup.sh 文件进行任何更改吗?

0 投票
1 回答
1035 浏览

mono - .sln 兼容的基于 Mono 的 CLI 构建系统?

我最近开始与使用 Visual Studio 的其他人一起进行 ASP.NET MVC 工作。虽然 MonoDevelop 可以打开他们的项目工作区文件(来自 MSVS2010 的 .sln)并很好地构建项目,但我很好奇是否有可以与 Mono 一起使用的 CLI 构建工具?我想简单地使用 vim 并切换到我的 shell 并运行一个简单的命令来构建工作区。如果这已经被排除在外,有什么想法吗?

作为额外的奖励,有人知道 ctags 或类似的插件是否适用于 vim 吗?我仍然需要不时查找 .NET 命名空间文档。