问题标签 [waf]

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 回答
2121 浏览

c++ - 链接时的 waf:“未定义的引用”错误

因此,在过去的 2 个小时里,我一直在努力解决这个编译器错误,并认为我会在这里发布代码,看看是否有人能解释我的错误。

我已经去掉了所有不相关的部分,留下了一个最小的程序(如下所示),据我所知,它应该可以编译和运行。如果我来了,但我看不到 main 中对 testFunc 的调用有什么问题,那么一切都会编译并运行良好。但是,通过调用 testFunc ,我得到以下信息:

正如您所看到的,下面的代码是作为一个更大的项目的一部分构建的,我知道错误可能来自构建过程,而不是我的代码问题,但无论哪种方式,我都遇到了障碍在我对这里发生的事情的理解中。我边走边学 c++,说实话,我觉得自己没有足够的经验,甚至无法自己编译这段代码,并且能够说“那肯定可以工作,但它不行”,这就是为什么我像这样呈现它。

可能相关的另外几点:

  • 我可以使用 abr-tools.cc 中 abr-helper.h 中定义的宏,当我将 abr-tools.cc 放在与 abr-helper.h 相同的文件夹中并仅使用 '#include "abr-helper 时,问题仍然存在。H”'。

  • 最初的错误是一样的,但是对于 abr-helper.h 中定义并在 abr-tools.cc 中使用的一堆其他东西

我将不胜感激你们可以提供的任何帮助,在此先感谢。

abr-helper.h:

abr-helper.cc:

abr-tool.cc:

0 投票
1 回答
1090 浏览

visual-c++ - WAF:MinGW (GCC) 和 MSVC 2012 之间的冲突

我刚刚遇到了 WAF 的痛苦。我专门使用 MinGW-w64 来构建东西。但是,最近,我安装了 MSVC 2012,因为有时需要构建各种小型实用程序,这些实用程序在使用 MinGW 构建时会出现一些问题。

WAF 鼓励不要将编译器选择硬编码到wscript. 中,而是从命令行中选择它,这听起来很合理,在这种情况下,我支持这种理念。所以wscript应该看起来像这样(忘了boost):

然后只需在命令行中键入:

强制 WAF首先--check-cxx-compiler=gxx查找 MinGW,因为默认情况下,Windows WAF 首先首选 MSVC。

注意: MinGW-w64 在 中PATH,MSVC 不在,但我猜由于注册表,WAF 仍然可以找到它。

所以,然后 WAF 在配置输出中给出这个(这意味着一切都很酷):

然后它开始构建,我得到的是这个很长的垃圾邮件:

MSVC 应该如何参与这个构建过程?!- 我不知道。但无论如何,最有趣的部分来了。让我们打破建议和硬编码 GCC 成为我们在以下方面的选择wscript

然后我们调用:

并在配置输出中查看:

注意:注意到输出的变化了吗?这对我来说已经是一个谜,因为该cxx_compiler工具(在前一个案例中使用)本身ctx.load('gxx')在幕后调用。那么在这两种情况下,这两种输出有何不同呢?

然后 WAF 开始构建,然后就可以了:

酷吧?:) 让我知道你们的想法,希望有人已经遇到过这个问题。

主演

WAF 1.7.8

MinGW-w64 (GCC 4.7.2)

MSVC 2012

0 投票
3 回答
4403 浏览

c++ - 如何使用 waf 在自定义路径中搜索库/标题?

我尝试在 waf wscript 文件中搜索库和标题。通常,这可以通过以下方式实现:

这在类 Unix 系统上运行良好,其中库和头文件大多位于公共位置。但是,我想为check_cxx()命令添加自定义搜索路径,尤其是让 Windows 系统上的用户有机会找到通常位于文件系统中的某个库。

我知道这个libpath论点,但是它仍然需要以某种方式填充,我想知道是否没有我错过的更通用甚至内置的解决方案。

我也很高兴听到有关 waf 中此类事情的其他方法、解决方案或良好实践。

0 投票
2 回答
8703 浏览

c++ - C++ 项目的 cmake vs waf

我发现了类似的主题:Autotools、Cmake 和 Scons 之间有什么区别?,但我的问题有点不同,我认为答案也可能是其他的。

我发现很多文章都说 waf 不稳定(API 更改),尚未准备好投入生产等(但所有这些文章都有 2 或 3 年的历史)。

如果我想,应该使用以下哪些构建工具:

  • 创建大型 C++ (11) 项目 - 假设是一个复杂的编译器
  • 与 LLVM 一起使用
  • 确保它灵活且易于使用
  • 确保它足够快
  • 在所有标准平台下编译(基础平台是Linux,但我也想在Windows和MacOSX下编译)

阅读了很多文章,我发现 Cmake 和 waf 是可用的“最佳”工具,但我没有使用它们,而且很难找到任何比较,这不是很偏颇(就像 scons 作者的比较)和不是很老。真的

0 投票
1 回答
1012 浏览

c++ - Waf - 找不到源:无

我正在尝试使用 编译 64 位应用程序Waf,但wscript返回错误:

Source not found: None.

我听说这可能是由于不正确的缩进或混合字符编码,而我wscript没有。

任何可能的解决方案/导致可能导致这种情况的原因是什么?

0 投票
1 回答
1096 浏览

c++ - ld使用Waf的时候找不到库,不使用Waf的时候可以找到

我正在尝试构建我的项目。我已经将 libuv 编译./libuvlibuv.a(所以库的相对路径是./libuv/libuv.a)。

当我直接使用clang时,它可以工作:

但是,当我使用 Waf 构建时,我收到一个链接器错误,表明 ld 找不到 libuv:

我的 wscript 相当简单:

为什么在通过 Waf 调用时找不到库,而在不使用 Waf 时一切正常(我怀疑它与-Wl,-Bstatic标志有关,但我不确定)?

0 投票
0 回答
249 浏览

python - Calling another build tool from setup.py

I have a medium-sized C++/Python project that requires external dependencies and tools to get compiled. Namely, to interact with Qt's MOC compiler among other stuff.

This project produces a library, header files and a python extension. I'd like to leverage from python setuptools to distribute and build this project. The issue is the build bits from distutils aren't satifactory for our project needs. We need things like parallel-builds and external dependence detection.

Question: What is the best way to do this? Would it be possible, for example, to write a setup.py that delegates the build to waf? A working example (even if summarized) is a plus!

0 投票
3 回答
6757 浏览

c++ - 添加包含路径到 Waf 配置 (C++)

如何向 wscript 添加包含路径?

我知道我可以声明每个 cpp 文件中要包含哪些文件夹中的哪些文件,例如:

但我不想为每个文件设置它。我想添加一个“全局包含”的路径,这样每次编译任何文件时都会包含它。

0 投票
1 回答
391 浏览

python - 在 WAF 脚本中处理更改的文件

是否可以在 wscript 文件中编写 WAF 函数,该函数将在构建每个更改的文件时调用?

我希望能够做到以下几点:

  1. 通过自定义 Python 函数处理所有输入.hpp文件并将它们输出到构建文件夹。如果此类文件已更改,我想处理它并更新其在输出文件夹中的定义。
  2. .hpp通过外部脚本处理所有输入文件并将结果输出到构建文件夹。

更新:

解释一下:我希望为每个更改的文件运行一个fun1(file)函数,该函数将读取文件,对其进行修改并返回修改后的版本,该版本应输出到目标目录。

0 投票
3 回答
884 浏览

linux - 杀死管道中的前一个命令

我正在运行这样的模拟

waf一旦filter.awk检测到发生了某些事情(例如在读取特定行之后),我如何才能终止命令?

我不能改变wafmyfile。我只能更改filter.awk, 和上面的命令(显然)。

评论后更新:

  • waf收到后不会终止SIGPIPE(应该吗?)
  • 它产生需要清理的子进程。

这是我自己的答案 (和挑战)


在处理了@thatotherguy 和@Chris 的答案之后,我简化了一点,得到了这个:

不幸的是,我无法摆脱该tmp文件,每次尝试将其PID作为变量传递都失败了。

我不会更改已接受的答案(因为它是在真正需要时才起作用的答案),但对于任何可以简化更多的人来说都是 +1。