每当我将其称为“ waf clean”时,waf最终都会清除构建中的所有内容。我希望有一种方法可以告诉waf仅清理特定目标。这样,只要我想再次运行所有单元测试,就不必重建所有内容。
例如,
如果我具有以下文件夹结构:
src
-acceptanceTests
-applicationA
-tests
-shared
-tests
Run Code Online (Sandbox Code Playgroud)
运行waf时,将构建applicationA并运行其所有测试。之后,我运行acceptanceTests,对applicationA进行更高级别的测试。然后,我去更改applicationA中的一些代码并重新编译。
然后,我想再次运行acceptanceTests,但是acceptanceTests都没有更改,因此waf将不会重建并运行它们。触发“清理干净”会清除applicationA,shared和acceptanceTests中的所有内容,这并不理想。相反,我希望能够运行“ waf cleanAcceptanceTests”命令,该命令仅应清除acceptanceTests目录。
我在源代码树中有protobuf原型文件.我想在每次更改和第一次运行时从proto文件生成源文件(例如,我创建新的原始文件).然后,我想从这些源文件中编译共享库并将它们保存在源代码树中.
实现目标的最佳方法是什么?
我需要在网络模拟器NS-3的代码中使用像unordered_map这样的数据结构.它使用waf builder来编译源代码.我很困惑,我应该在哪里添加-std = c ++ 0x添加到编译器标志?我尝试使用以下命令将其附加到主wscript文件中的CXXFlags:
module.env.append_value('CXXFLAGS', '-std=c++0x');
Run Code Online (Sandbox Code Playgroud)
但我仍然收到此错误:
此文件需要编译器和库支持即将推出的ISO C++标准C++ 0x.此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用.C/C++问题
我是否还应该将任何库添加到我的waf模块中?
PS:我的GCC版本是4.4
更新:更新到4.7后,我收到此错误:
error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉编译器使用0x而不是11?
我正在尝试使用以下命令从Node.js安装'png'模块:
npm install png
但是我收到以下错误:
node-waf配置构建
'node-waf'不被识别为内部或外部命令
我的问题是:Windows是否存在node-waf?
如何确定哪个特定工具选择为"cxx_compiler"等?免责声明:
def configure(ctx):
print('Running ' + ctx.cmd + ' in ' + ctx.path.abspath() )
ctx.load('compiler_c')
ctx.load('compiler_cxx')
def build(ctx):
print('Running ' + ctx.cmd + ' in ' + ctx.path.abspath() )
# Here print which C++ compiler was chosen
print 'Building cpp files with %s' % WHAT_GOES_HERE
Run Code Online (Sandbox Code Playgroud) 我已经waf
使用以下方法克隆并构建了脚本:
./waf-light configure
Run Code Online (Sandbox Code Playgroud)
然后要构建我的项目(由Gomspace提供),我需要将waf
和添加eclipse.py
到我的路径中。到目前为止,我还没有找到比这个setenv
脚本更好的:
WAFROOT=~/git/waf/
export PYTHONPATH=$WAFROOT/waflib/extras/:$PYTHONPATH
export PATH=~/git/waf/:$PATH
Run Code Online (Sandbox Code Playgroud)
调用方式:
source setenv
Run Code Online (Sandbox Code Playgroud)
这在某种程度上是一个非常丑陋的解决方案。有没有更优雅的方式来安装waf?
我想用waf构建一个库,但是使用与目标名称不同的名称安装它.看来你可以做到
bld.shlib(..., install_path='${PREFIX}/lib')
Run Code Online (Sandbox Code Playgroud)
但我需要能够做到这样的事情:
bld.shlib(..., install_as='${PREFIX}/lib/xyz')
Run Code Online (Sandbox Code Playgroud)
此外,bld.install_as()不会工作,因为它似乎不接受任务作为目标,我无法弄清楚如何将任务变成代表目标的节点,所以以下也不起作用:
tgt = bld.shlib(...)
bld.install_as('foo', tgt)
Run Code Online (Sandbox Code Playgroud)
或者,我需要能够禁用自动添加到库名称的"lib"前缀,但仅适用于这一个库 - 在构建期间不适用于所有库,例如:
bld.shlib(..., libprefix='', install_path="${PREFIX}/lib/")
Run Code Online (Sandbox Code Playgroud)
我知道你也可以设置shlib_PATTERN,但这似乎会影响当前环境下的所有库.我们有一个非常复杂的构建,它使用许多不同的环境来同时构建调试/发布,所以只是克隆当前环境并更改标志也不起作用,因为它克隆了默认环境,而不是最终构建目标的环境under(因为我们在构建期间克隆了每个环境的目标).
有什么想法吗?谢谢!
我跑后node-waf configure
和node-waf build
,一个.lock-wscript
我的文件夹中显示,这是什么?即使我跑node-waf clean
,它仍然存在.我应该保留还是删除它?
我正在尝试为node.js编写C ++模块。节点正在使用waf作为构建器。
我想检查配置,如果库“ sigar”存在。我正在尝试这样做:
def configure(conf):
conf.check_cxx(lib='sigar')
Run Code Online (Sandbox Code Playgroud)
当我运行“ node-waf configure”时,收到以下消息:
Checking for library sigar : not found
Run Code Online (Sandbox Code Playgroud)
但是libsigar.so存在:
# whereis libsigar
libsigar: /lib64/libsigar.so
Run Code Online (Sandbox Code Playgroud)
安装“ libsigar”库后,我还运行了ldconfig。节点模块可以编译,链接并正常工作。其他库,例如libm,libboost_system等,可以在configure上找到。
有人可以告诉我我在做什么错吗?除了仅将* .so复制到库路径并运行ldconfig之外,安装库还有什么特别的事情吗?
谢谢你的帮助。
我正在为我的项目使用 Waf 构建系统。我的项目中有一些依赖项,我并不总是希望链接和编译它们。我想知道是否有一种方法可以将额外的参数传递给 Waf 配置和 Waf 安装脚本,我可以在 wscript 中读取这些参数并确定是否需要编译某些可执行文件?